Nginx安装部署

Nginx ("engine x") 是一个高性能的 HTTP 和反向代理服务器,也是一个 IMAP/POP3/SMTP 代理服务器。 Nginx 是由 Igor Sysoev 为俄罗斯访问量第二的 Rambler.ru 站点开发的,第一个公开版本0.1.0发布于2004104日。其将源代码以类BSD许可证的形式发布,因它的稳定性、丰富的功能集、示例配置文件和低系统资源的消耗而闻名。201161日,nginx 1.0.4发布。

 

一般我们都需要先装pcre, zlib,前者为了重写rewrite,后者为了gzip压缩。

1.选定源码目录

选定目录 /usr/local/

cd /usr/local/

 

2.安装PCRE

cd /usr/local/

wget ftp://ftp.csx.cam.ac.uk/pub/software/programming/pcre/pcre-8.38.tar.gz

tar -zxvf pcre-8.38.tar.gz

cd pcre-8.38

./configure

make

make install

 

3.安装zlib

cd /usr/local/ 

wget http://zlib.net/zlib-1.2.8.tar.gz

tar -zxvf zlib-1.2.8.tar.gz cd zlib-1.2.8

./configure

make

make install

 

4.安装ssl

cd /usr/local/

wget http://www.openssl.org/source/openssl-1.0.1c.tar.gz

tar -zxvf openssl-1.0.1c.tar.gz

./config

make

rm /usr/bin/pod2man

make install

 

5.安装nginx

Nginx 一般有两个版本,分别是稳定版和开发版,您可以根据您的目的来选择这两个版本的其中一个,下面是把 Nginx 安装到 /usr/local/nginx 目录下的详细步骤:

cd /usr/local/

wget http://nginx.org/download/nginx-1.2.8.tar.gz

tar -zxvf nginx-1.2.8.tar.gz

cd nginx-1.2.8  

./configure --prefix=/usr/local/nginx 

make

make install

 

--with-pcre=/usr/src/pcre-8.21 指的是pcre-8.21 的源码路径。

--with-zlib=/usr/src/zlib-1.2.7 指的是zlib-1.2.7 的源码路径。

 

6.启动

确保系统的 80 端口没被其他程序占用,

/usr/local/nginx/sbin/nginx

检查是否启动成功:

netstat -ano|grep 80 有结果输入说明启动成功

打开浏览器访问此机器的 IP,如果浏览器出现 Welcome to nginx! 则表示 Nginx 已经安装并运行成功。

如果启动nginx时提示:error while loading shared libraries: libpcre.so.1: cannot open shared object file: No such file or directory,意思是找不到libpcre.so.1这个模块,而导致启动失败。这是部分linux系统存有的通病。解决问题的方法如下:

如果是32位系统

[root@lee ~]#  ln -s /usr/local/lib/libpcre.so.1 /lib

如果是64位系统

[root@lee ~]#  ln -s /usr/local/lib/libpcre.so.1 /lib64

然后在启动nginx就OK了

 

7.重启

/usr/local/nginx/sbin/nginx –s reload

 

8.修改配置文件

cd /usr/local/nginx/conf

vi nginx.conf

 

9.常用配置

#nginx运行用户和组

user    www www;  

#启动进程,通常设置成和cpu的数量相等

worker_processes  4;

 

#全局错误日志及PID文件

pid /var/run/nginx.pid;

error_log  /var/log/nginx/error.log;

 

events {

        #epoll是多路复用IO(I/O Multiplexing)中的一种方式,但是仅用于linux2.6以上内核,可以大大提高nginx的性能

use epoll;

                   #单个后台worker process进程的最大并发链接数

        worker_connections  10240;

}

#设定http服务器,利用它的反向代理功能提供负载均衡支持

http {

        include       mime.types;

        default_type  application/octet-stream;

        error_page 400 403 500 502 503 504  /50x.html;

        index index.html index.shtml

        autoindex off;

        fastcgi_intercept_errors on;

        sendfile        on;

 

        # These are good default values.

        tcp_nopush      on;

        tcp_nodelay     off;

 

        # output compression saves bandwidth

        gzip  off;

        #gzip_static on;

        #gzip_min_length  1k;

        gzip_http_version 1.0;

        gzip_comp_level 2;

        gzip_buffers  4 16k;

        gzip_proxied any;

        gzip_disable "MSIE [1-6]\.";

        gzip_types  text/plain text/html text/css application/x-javascript application/xml application/xml+rss text/javascript;

        #gzip_vary on;

 

        server_name_in_redirect off;

 

#设定负载均衡的服务器列表

        upstream portals {

                  server 172.16.68.134:8082 max_fails=2 fail_timeout=30s;

                  server 172.16.68.135:8082 max_fails=2 fail_timeout=30s;

                            server 172.16.68.136:8082 max_fails=2 fail_timeout=30s;

                  server 172.16.68.137:8082 max_fails=2 fail_timeout=30s;

        }

 

        #upstream overflow {

         #       server 10.248.6.34:8090 max_fails=2 fail_timeout=30s;       

         #       server 10.248.6.45:8080 max_fails=2 fail_timeout=30s;       

        #}

 

        server {

                                     #侦听8080端口

                listen       8080;

                server_name  127.0.0.1;

 

                   #403404页面重定向地址

                   error_page  403 = http://www.e100.cn/ebiz/other/217/403.html;

                   error_page  404 = http://www.e100.cn/ebiz/other/218/404.html;

                   proxy_connect_timeout      90;

                   proxy_send_timeout         180;

                   proxy_read_timeout         180;

 

                   proxy_buffer_size 64k;

                   proxy_buffers 4 128k;

                   proxy_busy_buffers_size 128k;

 

                   client_header_buffer_size 16k;

                   large_client_header_buffers 4 64k;

 

                #proxy_send_timeout         3m;

                #proxy_read_timeout         3m;

                #proxy_buffer_size          4k;

                #proxy_buffers              4 32k;

 

                proxy_set_header Host $http_host;

                proxy_max_temp_file_size 0;

                #proxy_hide_header Set-Cookie;

                  

         #       if ($host != 'www.e100.cn' ) {

         #                rewrite ^/(.*)$ http://www.e100.cn/$1 permanent;

         #       }

               location / {

                       deny all;

               }

               location ~ ^/resource/res/img/blue/space.gif {

                        proxy_pass http://tecopera;

               }

 

               location = / {

                   rewrite ^(.*)$  /ebiz/event/517.html last;

               }

 

               location = /ebiz/event/517.html {

                    add_header Vary Accept-Encoding;

                    root /data/web/html;

                    expires 10m;

               }

 

               location = /check.html {

                    root /usr/local/nginx/html/;

                    access_log off;

               }

 

               location = /50x.html {

                    root /usr/local/nginx/html/;

                    expires 1m;

                    access_log off;

               }

 

              location = /index.html {

                    add_header Vary Accept-Encoding;

     #定义服务器的默认网站根目录位置

                    root /data/web/html/ebiz;

                    expires 10m;

               }

     #定义反向代理访问名称

               location ~ ^/ecps-portal/* {

                    # expires 10m;

      #重定向集群名称

                    proxy_pass http://portals;

                    #proxy_pass http://172.16.68.134:8082;

               }

 

               location ~ ^/fetionLogin/* {

                    # expires 10m;

                    proxy_pass http://portals;

                    #proxy_pass http://172.16.68.134:8082;

                }

 

                #location  ~ ^/business/* {                                                                      

                #   # expires 10m;                                                                                

                #    proxy_pass http://172.16.68.132:8088;                                                                   

                #    #proxy_pass http://172.16.68.134:8082;                                                       

                #}

 

               location ~ ^/rsmanager/* {

                    expires 10m;

                    root /data/web/;

                    #proxy_pass http://rsm;

               }

#定义nginx处理的页面后缀

                   location ~* (.*)\.(jpg|gif|htm|html|png|js|css)$  {

                            root /data/web/html/;

#页面缓存时间为10分钟

                         expires 10m;

                   }

 

#设定查看Nginx状态的地址     

               location ~* ^/NginxStatus/ {

                    stub_status on;

                    access_log off;

                    allow 10.1.252.126;

                    allow 10.248.6.49;

                    allow 127.0.0.1;

                    deny all;

               }

         #       error_page   405 =200 @405;

         #       location @405

         #       {

         #                proxy_pass http://10.248.6.45:8080;

         #       }  

               access_log  /data/logs/nginx/access.log combined;

               error_log   /data/logs/nginx/error.log;

        }

         server {

               listen       8082;

               server_name  _;

               location = /check.html {

                    root /usr/local/nginx/html/;

                    access_log off;

               }

                  

        }

         server {

                   listen       8088;

                   server_name  _;

                   location ~ ^/* {

                   root /data/web/b2bhtml/;

                   access_log off;

         }                

         }

        server {

                listen       9082;

                server_name  _;

         #        location ~ ^/resource/* {

         #           expires 10m;

         #           root /data/web/html/;

         #       }

                 location  / {

                     root /data/web/html/sysMaintain/;

                       if (!-f $request_filename) {

                            rewrite ^/(.*)$ /sysMaintain.html last;

                           }

                }

        }

 }

 

Nginx的启动、停止、平滑重启、信号控制和平滑升级

● Nginx 的启动
        假设 nginx 安装在 /usr/local/nginx 目录中,那么启动 nginx 的命令就是:

Command代码  收藏代码
  1. [root@localhost ~]# /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf  

        参数 "-c" 指定了配置文件的路径,如果不加 "-c" 参数,Nginx 会默认加载其安装目录的 conf 子目录中的 nginx.conf 文件。


    ● Nginx 的停止
        nginx 的停止方法有很多,一般通过发送系统信号给 nginx 的主进程的方式来停止 nginx。

                (1) 从容停止 nginx

Command代码  收藏代码
  1. [root@localhost ~]# kill -QUIT 【Nginx主进程号】  

        或

Command代码  收藏代码
  1. # ` 字符是数字键盘 1 字符左边的那个字符,不需要 Shift,直接按 ` 字符即可。  
  2. # 如果在 nginx.conf 配置文件中指定了 pid 文件存放的路径,该文件中存放的就是 nginx 当前的主进程号。默认是放在 nginx 安装目录的 logs 目录下。  
  3. [root@localhost ~]# kill -QUIT `/usr/local/nginx/logs/nginx.pid`  


                (2) 快速停止 nginx

Command代码  收藏代码
  1. [root@localhost ~]# kill -TERM 【Nginx主进程号】  

        或

Command代码  收藏代码
  1. [root@localhost ~]# kill -INT 【Nginx主进程号】  


                (3) 强制停止所有 nginx 进程

Command代码  收藏代码
  1. [root@localhost ~]# pkill -9 nginx  



    ● Nginx 的平滑重启
        如果改变了 nginx 的配置文件,想重启 nginx,同样可以发送系统信号给 nginx 主进程的方式来进行。不过,重启之前,要确认 nginx 配置文件的语法是否正确的。否则 nginx 将不会加载新的配置文件。可以通过以下命令来判断配置文件是否正确:

Command代码  收藏代码
  1. # -t 参数将检查配置文件的语法是否正确,默认会检查 /usr/local/nginx/conf/nginx.conf 文件。  
  2. [root@localhost ~]# /usr/local/nginx/sbin/nginx -t  
  3. # 如果要对指定的配置文件进行语法检查,可以继续添加 -c 参数  
  4. [root@localhost ~]# /usr/local/nginx/sbin/nginx -t -c /home/a/b/c/my-nginx.conf  

        这个时候,就可以平滑重启 nginx 了。

Command代码  收藏代码
  1. [root@localhost ~]# kill -HUP 【Nginx主进程号】  

        当 nginx 接收到 HUP 信号时,它会尝试先解析配置文件,如果成功,就应用新的配置文件(例如,重新打开日志文件或监听的套接字)。之后,nginx 运行新的工作进程并从容关闭旧的工作进程。通知工作进程关闭监听套接字,但是继续为当前连接的客户提供服务。所有的客户端的服务完成后,旧的工作进程被关 闭。如果新的配置文件应用失败,nginx 将继续使用旧的配置文件进行工作。


    ● Nginx 的信号控制

  •     TERM, INT 快速关闭
  •     QUIT 从容关闭
  •     HUP 平滑重启,重新加载配置文件
  •     USR1 重新打开日志文件,在切割日志时用途较大
  •     USR2 平滑升级可执行程序
  •     WINCH 从容关闭工作进程


    ● Nginx 的平滑升级
        当需要将正在运行中的 nginx 升级、添加/删除服务器模块时,可以在不中断服务的情况下,使用新版本、重编译的 nginx 可执行程序替换旧版本的课执行程序。步骤如下:

        (1) 使用新的可执行程序替换旧的可执行程序,对于编译安装的 nginx,可以将新版本编译安装到旧版本的 nginx 安装路径中。替换之前,最好备份一下旧的可执行文件。

        (2) 发送以下指令:

Command代码  收藏代码
  1. [root@localhost ~]# kill -USR2 【旧颁布的Nginx主进程号】  


        (3) 旧版本 nginx 的主进程将重命名它的 pid 文件为 .oldbin(例如:/usr/local/nginx/logs/nginx.pid.oldbin),然后执行新版本的 nginx 可执行程序,依次启动新的主进程和新的工作进程。

        (4) 此时,新、旧版本的 nginx 实例会同时运行,共同处理输入的请求。要逐步停止旧版本的 nginx 实例,你必须发送 WINCH 信号给旧的主进程,然后,它的工作进程就将开始从容关闭:

Command代码  收藏代码
  1. kill -WINCH 【旧版本的Nginx主进程号】  


        (5) 一段时间后,旧的工作进程(worker process)处理了所有已连接的请求后退出,仅由新的工作进程来处理输入的请求了。

        (6) 这时候,我们可以决定是使用新版本,还是恢复到旧版本:
              kill -HUP 【旧的主进程号】:nginx 将在不重载配置文件的情况下启动它的工作进程
              kill -QUIT 【新的主进程号】:从容关闭其工作进程(worker process)
              kill -TERM 【新的主进程号】:强制退出
              kill 【新的主进程号或旧的主进程号】:如果因为某些原因新的工作进程不能退出,则向其发送 kill 信号

        新的主进程退出后,旧的主进程会移除 .oldbin 后缀,恢复为它 的 .pid 文件,这样,一切就恢复到升级之前了。如果尝试升级成功,而你也希望保留新的服务器时,可发送 QUIT 信号给旧的主进程,使其退出而只留下新的服务器运行。

posted @ 2016-03-02 11:53  离线中  阅读(223)  评论(0)    收藏  举报