最近节日
正在加载日历...----
Nginx是一款高性能的http 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器。

Nginx是一款高性能的http 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器。
由俄罗斯的程序设计师Igor Sysoev所开发,官方测试nginx能够支支撑5万并发链接,
并且cpu、内存等资源消耗却非常低,运行非常稳定。
http服务器。Nginx是一个http服务可以独立提供http服务。可以做网页静态服务器。
虚拟主机。可以实现在一台服务器虚拟出多个网站。例如个人网站使用的虚拟主机。
反向代理,负载均衡。当网站的访问量达到一定程度后,单台服务器不能满足用户的请求时,
需要用多台服务器集群可以使用nginx做反向代理。并且多台服务器可以平均分担负载,
不会因为某台服务器负载高宕机而某台服务器闲置的情况。
1 下载 官方网址:http://nginx.org/en/download.html
官网提供三种版本:
Nginx官网提供了三个类型的版本 Mainline version:Mainline 是 Nginx 目前主力在做的版本,可以说是开发版 Stable version:最新稳定版,生产环境上建议使用的版本 Legacy versions:遗留的老版本的稳定版


下面的环境需要视自己的系统情况而定,没有的环境安装以下就好。
# yum install gcc-c++PCRE(Perl Compatible Regular Expressions)是一个Perl库,包括 perl 兼容的正则表达式库。
nginx的http模块使用pcre来解析正则表达式,所以需要在linux上安装pcre库。
注:pcre-devel是使用pcre开发的一个二次开发库。nginx也需要此库。
# yum install -y pcre pcre-develzlib库提供了很多种压缩和解压缩的方式,nginx使用zlib对http包的内容进行gzip,所以需要在linux上安装zlib库。
# yum install -y zlib zlib-develOpenSSL 是一个强大的安全套接字层密码库,囊括主要的密码算法、常用的密钥和证书封装管理功能及SSL协议,
并提供丰富的应用程序供测试或其它目的使用。
nginx不仅支持http协议,还支持https(即在ssl协议上传输http),所以需要在linux安装openssl库。
# yum install -y openssl openssl-devel
# tar -xvf nginx-1.14.0.tar.gz -C /usr/local
./configure \--prefix=/usr/local/nginx \--pid-path=/var/run/nginx/nginx.pid \--lock-path=/var/lock/nginx.lock \--error-log-path=/var/log/nginx/error.log \--http-log-path=/var/log/nginx/access.log \--with-http_gzip_static_module \--http-client-body-temp-path=/var/temp/nginx/client \--http-proxy-temp-path=/var/temp/nginx/proxy \--http-fastcgi-temp-path=/var/temp/nginx/fastcgi \--http-uwsgi-temp-path=/var/temp/nginx/uwsgi \--http-scgi-temp-path=/var/temp/nginx/scgi \--with-http_stub_status_module \--with-http_ssl_module \--with-file-aio \--with-http_realip_module
如果没有makeFile文件,编译的时候会报错

--prefix=/usr/local/nginx 表示软件安装到/usr/local/nginx下面。这个make install 的时候就不用在指定安装路径。执行完成后查看目录里面已经多了一个Makefile文件
需要在/var下创建temp及nginx目# mkdir /var/temp/nginx -p-p 表示级联创建的意思

这里不需要再次执行安装路径,创建makefile文件的时候已经指定了。


进入sbin目录,执行命令./nginx
[root@admin sbin]# ./nginx
[root@admin sbin]# ps -aux | grep nginx

-a:显示所有终端机下执行的程序,除了阶段作业领导者之外。
a:显示现行终端机下的所有程序,包括其他用户的程序。
u:以用户为主的格式来显示程序状况。
x:显示所有程序,不以终端机来区分。
[root@admin sbin]# ./nginx -s stop
或者
[root@admin sbin]# ./nginx -s quit
先关闭,然后启动
[root@admin sbin]# ./nginx -s reload
首先需要关闭防火墙:默认端口是80
/sbin/iptables -I INPUT -p tcp —dport 80 -j ACCEPT /etc/rc.d/init.d/iptables save
需要添加安全组规则


就是在一台服务器启动多个网站。
如何区分不同的网站:主要有以下两种方式
方式一:端口不同
方式二:域名不同
nginx配置文件的位置:/usr/local/nginx/conf/nginx.conf
原始配置文件的内容如下:



[root@admin nginx]# vim html-81/index.html

[root@admin sbin]# ./nginx -s reload
然后分别访问192.168.204.131:80 和192.168.204.131:81


域名就是网站:http://www.baidu.com就是域名
DNS域名解析服务器,把域名解析为ip地址。保存的就是域名和ip地址的映射关系。
一级域名:http://baidu.com
二级域名:http://www.baidu.com
一个域名对应与一个ip地址,一个ip地址可以被多个域名绑定。
只需要买一个一级域名,后面的二级,三级域名你自己可以随便定义。
本地测试我们可以通过修改hosts配置文件来完成:
hosts文件的位置:C:\Windows\System32\drivers\etc
可以自己手动配置域名和ip的映射关系,如果hosts文件中配置了域名和ip的对应关系,不需要走DNS域名解析服务器。
因为拿到一个域名,首先是到hosts文件里面查找,没有才有去DNS域名解析器查找。

1 修改本地hosts配置文件



[root@admin sbin]# ./nginx -s reload
5 然后使用浏览器分别访问:http://www.taobao.com 和 http://www.baidu.com


两个域名指向同一台nginx服务器,用户访问不同的域名显示不同的网页内容。
两个域名是http://www.baidu.com和http://www.taobao.com
nginx代理服务器使用虚拟机192.168.204.131

第二步:启动两个tomcat。
第三步:反向代理服务器的配置

第五步:配置域名
在hosts文件中添加域名和ip的映射关系
192.168.204.131 http://www.baidu.com
192.168.204.131 http://www.taobao.com
如果一个服务由多个服务器提供,需要把负载分配到不同的服务器处理,需要负载均衡。


每次启动nginx服务都需要到安装目录下的/sbin下面,感觉挺麻烦的。
下面介绍一下如何在Linux(CentOS)系统上,设置nginx开机自启动。
首先执行命令:
然后加下面的内容复制到nginx配置文件中
#!/bin/sh # # nginx - this script starts and stops the nginx daemon # # chkconfig: - 85 15 # description: NGINX is an HTTP(S) server, HTTP(S) reverse \ # proxy and IMAP/POP3 proxy server # processname: nginx # config: /etc/nginx/nginx.conf # config: /etc/sysconfig/nginx # pidfile: /var/run/nginx.pid # Source function library. . /etc/rc.d/init.d/functions # Source networking configuration. . /etc/sysconfig/network # Check that networking is up. [ "$NETWORKING" = "no" ] && exit 0 nginx="/usr/sbin/nginx" prog=$(basename $nginx) NGINX_CONF_FILE="/etc/nginx/nginx.conf" [ -f /etc/sysconfig/nginx ] && . /etc/sysconfig/nginx lockfile=/var/lock/subsys/nginx make_dirs() { # make required directories user=`$nginx -V 2>&1 | grep "configure arguments:" | sed 's/[^*]*--user=\([^ ]*\).*/\1/g' -` if [ -z "`grep $user /etc/passwd`" ]; then useradd -M -s /bin/nologin $user fi options=`$nginx -V 2>&1 | grep 'configure arguments:'` for opt in $options; do if [ `echo $opt | grep '.*-temp-path'` ]; then value=`echo $opt | cut -d "=" -f 2` if [ ! -d "$value" ]; then # echo "creating" $value mkdir -p $value && chown -R $user $value fi fi done } start() { [ -x $nginx ] || exit 5 [ -f $NGINX_CONF_FILE ] || exit 6 make_dirs echo -n $"Starting $prog: " daemon $nginx -c $NGINX_CONF_FILE retval=$? echo [ $retval -eq 0 ] && touch $lockfile return $retval } stop() { echo -n $"Stopping $prog: " killproc $prog -QUIT retval=$? echo [ $retval -eq 0 ] && rm -f $lockfile return $retval } restart() { configtest || return $? stop sleep 1 start } reload() { configtest || return $? echo -n $"Reloading $prog: " killproc $nginx -HUP RETVAL=$? echo } force_reload() { restart } configtest() { $nginx -t -c $NGINX_CONF_FILE } rh_status() { status $prog } rh_status_q() { rh_status >/dev/null 2>&1 } case "$1" in start) rh_status_q && exit 0 $1 ;; stop) rh_status_q || exit 0 $1 ;; restart|configtest) $1 ;; reload) rh_status_q || exit 7 $1 ;; force-reload) force_reload ;; status) rh_status ;; condrestart|try-restart) rh_status_q || exit 0 ;; *) echo $"Usage: $0 {start|stop|status|restart|condrestart|try-restart|reload|force-reload|configtest}" exit 2 esac
地址:http://wiki.nginx.org/RedHatNginxInitScript
注意:如果是自定义安装的nginx,修改根据实际情况修改安装路和配置文件。
nginx="/usr/sbin/nginx" 修改成你的nginx执行程序的路径。比如我的是nginx="/usr/local/nginx/sbin/nginx"NGINX_CONF_FILE="/etc/nginx/nginx.conf" 修改成你的配置文件的路径例如:NGINX_CONF_FILE="/usr/local/nginx/nginx.conf修改完成后保存脚本文件,wq 保存并退出
# chmod a+x /etc/init.d/nginx解释:a+x==>all user can execute 所有用户可执行)的意思
到这里,我们就可以使用nginx脚本对服务进行管理了
# /etc/init.d/nginx start 启动服务 # /etc/init.d/nginx stop 停止服务# /etc/init.d/nginx restart 重启服务 # /etc/init.d/nginx status 查看服务的状态# /etc/init.d/nginx reload 刷新配置文件上面的方法完成了用脚本管理nginx服务的功能,但是还是不太方便,比如要设置nginx开机启动等。
这个时候我们可以使用chkconfig来进行管理。
# chkconfig --add /etc/init.d/nginx# service nginx start 启动服务 # service nginx stop 停止服务# service nginx restart 重启服务# service nginx status 查询服务的状态# service nginx relaod 刷新配置文# chkconfig nginx on[root@iz2z init.d]# cd /lib/systemd/system/
内如如下:

[Unit] Description=nginx service After=network.target [Service] Type=forking ExecStart=/usr/local/nginx/sbin/nginx ExecReload=/usr/local/nginx/sbin/nginx -s reload ExecStop=/usr/local/nginx/sbin/nginx -s quit PrivateTmp=true [Install] WantedBy=multi-user.target
[Unit]:服务的说明Description:描述服务After:描述服务类别[Service]服务运行参数的设置Type=forking是后台运行的形式ExecStart为服务的具体运行命令ExecReload为重启命令ExecStop为停止命令PrivateTmp=True表示给服务分配独立的临时空间注意:[Service]的启动、重启、停止命令全部要求使用绝对路径[Install]运行级别下服务安装的相关设置,可设置为多用户,即系统运行级别为3保存退出。
# systemctl enable nginx如果不想开机自启动了,可以使用下面的命令取消开机自启动
# systemctl disable nginx
# systemctl start nginx.service 启动nginx服务# systemctl stop nginx.service 停止服务# systemctl restart nginx.service 重新启动服务# systemctl list-units --type=service 查看所有已启动的服务# systemctl status nginx.service 查看服务当前状态# systemctl enable nginx.service 设置开机自启动# systemctl disable nginx.service 停止开机自启动
直接按照提示执行命令systemctl daemon-reload 即可。
# systemctl daemon-reload之前在虚拟机centos6.5上面设置自启动之后,重新启动系统可以正常启动,也不会出错。
centos6.5的自启动设置见16部分知识点。
但是在centos7.4(阿里云上面),参照第17部分配置好了自启动。重启系统发现nginx并没有自启动
使用命名systemctl status nginx查看了一下状态,内容如下:


在配置文件中找到:#pid logs/nginx.pid;


# mkdir /var/run/nginx -p可以查看一下是否成功启动了

测试发现,只要执行reboot命令重启,var/run/nginx,nginx这个文件夹都会被删除,
搞得每一次都要去建立nginx这个文件夹,简直麻烦到了极点,实在受不了。下面
继续来解决这个问题。

# mkdir /usr/local/nginx/logs
# cp nginx.pid /usr/local/nginx/logs/
# cp -r logs conf
[root@iz2logs]# chmod 755 nginx.pid
# reboot
上面的过程有点繁琐了,实际可以直接按照下面的这个简单方法解决
修改nginx.conf文件如下:

然后启动就可以了,并且重启也不会被删除。
这样下面的日志文件的配置也可以简化为去掉# error_log logs/error.log info; 前面的“#”就可以了
error_log logs/error.log info;

# mkdir -p /var/log/nginx/# /usr/local/nginx/sbin/nginx -s reload