• Nginx安装部署以及配置文件解析


    Nginx 中的 Location 指令 是NginxHttpCoreModule中重要指令。Location 指令,是用来为匹配的 URI 进行配置,URI 即语法中的”/uri/”,可以是字符串或正则表达式。但如果要使用正则表达式,则必须指定前缀。

    nginx location语法

    基本语法:location [=|~|~*|^~] /uri/ { … }

    = 严格匹配。如果这个查询匹配,那么将停止搜索并立即处理此请求。
    ~ 为区分大小写匹配(可用正则表达式)
    ~* 为不区分大小写匹配(可用正则表达式)
    !~和!~*分别为区分大小写不匹配及不区分大小写不匹配
    ^~ 如果把这个前缀用于一个常规字符串,那么告诉nginx 如果路径匹配那么不测试正则表达式。

    Location语法语法:location [=|~|~*|^~] /uri/ { … }
    注:
    1、~   为区分大小写匹配
    2、~* 为不区分大小写匹配
    3、!~和!~*分别为区分大小写不匹配及不区分大小写不匹配

    ------------------------------------------------------------------------------

    隐藏不必要的信息

    大家可以看一下我的博客请求响应头,有这么一行server: nginx,说明我用的是 Nginx 服务器,但并没有具体的版本号。由于某些 Nginx 漏洞只存在于特定的版本,隐藏版本号可以提高安全性。这只需要在配置里加上这个就可以了:

    server_tokens   off;

    -----------------------------------------------------------------------------------------------------------------------------------------------

    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.21.tar.gz

    tar -zxvf pcre-8.21.tar.gz

    cd pcre-8.21

    ./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

    make install

     

    5.安装nginx

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

     

    cd /usr/local/

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

    tar -zxvf nginx-1.7.2.tar.gz

    cd nginx-1.7.2

    ./configure
        --sbin-path=/usr/local/nginx/nginx
        --conf-path=/usr/local/nginx/nginx.conf
        --pid-path=/usr/local/nginx/nginx.pid
        --with-http_ssl_module
        --with-pcre=../pcre-4.4
        --with-zlib=../zlib-1.1.3
    复制代码

    我这里简洁描述一下配置命令的几个参数的含义:

    • --prefix=path   定义服务器保存文件的目录,默认为/usr/local/nginx
    • --sbin-path=path   nginx执行文件名,默认为prefix/sbin/nginx
    • --conf-path=path   设置nginx.conf配置文件名,默认为prefix/conf/nginx.conf
    • --pid-path=path    设置nginx.pid文件名,它用来保存nginx主进程的进程ID,默认为prefix/logs/nginx.pid
    • --error-log-path=path   设置错误日志文件名,默认为prefix/logs/error.log
    • --http-log-path=path     设置HTTP请求日志文件名,默认为prefix/logs/access.log
    • --user-name=path     设置未授权用户名,默认为nobody
    • --group=name     设置组名,默认为未授权用户名
    • --with-select_module    编译或取消编译利用select()方法的模块
    • --with-poll_module     编译或取消编译利用poll()方法的模块
    • --without-http_gzip_module    取消编译HTTP服务器压缩响应的模块,需要zlip
    • --without-http_rewrite_module   取消编译HTTP服务器重定向请求或修改请求URI地址的模块,需要PCRE
    • --without-http_proxy_module    取消编译HTTP服务器代理模块
    • --with-http_ssl_module    编译添加对HTTPS协议的支持,需要OpenSSL
    • --with-pcre=path    设置PCRE库的源代码路径,下载PCRE源码后解压缩到指定的path即可,剩下的交给nginx的./configure和make命令完成
    • --with-pcre-jit    编译PCRE库支持及时编译
    • --with-zlib=path    设置zlib库源代码的路径,同样下载zlib源码后解压到指定的path即可
    • --with-cc-opt=parameters    设置CFLAGS变量的额外参数
    • --with-ld-opt=parameters    设置链接时的额外参数
    • --with-http_stub_status_module 是为了启用 nginx 的 NginxStatus 功能,用来监控 Nginx 的当前状态

    /usr/local/nginx/sbin/nginx  -V 可以查看安装编译时的参数

    Nginx 监控

    上面是一个实际网站的配置实例,其中灰色文字为配置说明。上述配置中,首先我们定义了一个 location ~ ^/NginxStatus/,这样通过 http://localhost/NginxStatus/ 就可以监控到 Nginx 的运行信息,显示的内容如下:

    Active connections: 70 
    server accepts handled requests
     14553819 14553819 19239266 
    Reading: 0 Writing: 3 Waiting: 67

    NginxStatus 显示的内容意思如下:

    • active connections – 当前 Nginx 正处理的活动连接数。
    • server accepts handled requests -- 总共处理了 14553819 个连接 , 成功创建 14553819 次握手 ( 证明中间没有失败的 ), 总共处理了 19239266 个请求 ( 平均每次握手处理了 1.3 个数据请求 )。
    • reading -- nginx 读取到客户端的 Header 信息数。
    • writing -- nginx 返回给客户端的 Header 信息数。
    • waiting -- 开启 keep-alive 的情况下,这个值等于 active - (reading + writing),意思就是 Nginx 已经处理完正在等候下一次请求指令的驻留连接。

     

    6.启动

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

    /usr/local/nginx/sbin/nginx   或   /usr/local/nginx/sbin/nginx   -c /usr/local/nginx/conf/nginx.conf

     /usr/local/nginx/sbin/nginx  -reload

    /usr/local/nginx/sbin/nginx  -stop

    检查是否启动成功:

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

     

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

     

    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;

                               }

                    }

            }

     

    }

    示例文件:

    user  root root;
    
    worker_processes auto;
    
    #error_log  logs/nginx_error.log  crit;
    
    pid        /usr/local/nginx/nginx.pid;
    user  root root;
    
    worker_processes auto;
    
    #error_log  logs/nginx_error.log  crit;
    
    pid        /usr/local/nginx/nginx.pid;
    
    #Specifies the value for maximum file descriptors that can be opened by this process.
    worker_rlimit_nofile 512000;
    
    events
    {
      use epoll;
      worker_connections 51200;
    }
    
    http
    {
      include       mime.types;
      default_type  application/octet-stream;
      #charset  gb2312;
      server_tokens off;
      server_names_hash_bucket_size 128;
      client_header_buffer_size 32k;
      large_client_header_buffers 4 32k;
      client_max_body_size 8m;
    
      sendfile on;
      tcp_nopush     on;
    
      keepalive_timeout 60;
    
      tcp_nodelay on;
    
      gzip on;
      gzip_min_length  1k;
      gzip_buffers     4 16k;
      gzip_http_version 1.0;
      gzip_comp_level 2;
      gzip_types       text/plain application/x-javascript text/css application/xml text/javascript;
      gzip_vary on;
    
    
    
      #limit_zone  crawler  $binary_remote_addr  10m;
    
    upstream sdk_groups {
        server 10.1.1.23:8231 weight=1;
        server 10.1.1.23:8232 weight=1;
        server 10.1.1.24:8241 weight=1;
        server 10.1.1.24:8242 weight=1;
    }
    
            log_format  sdklogs  '$remote_addr - $remote_user [$time_local] "$request" ' '$status $body_bytes_sent "$http_referer" '
                   '"$http_user_agent" $http_x_forwarded_for';
    
    upstream sell_groups {
        server 10.1.1.25:8251 weight=1;
        server 10.1.1.25:8252 weight=1;
        server 10.1.1.26:8261 weight=1;
        server 10.1.1.26:8262 weight=1;
    }
    
            log_format  selllogs  '$remote_addr - $remote_user [$time_local] "$request" ' '$status $body_bytes_sent "$http_referer" '
                   '"$http_user_agent" $http_x_forwarded_for';
    
    
    ###Lop-SDK
      server
      {
        listen       80;
        server_name  lopsdk.uuzz.com;
        index index.html index.htm index.jsp;
    
        location ~ ^/(WEB-INF)/
        {
        deny all;
        }
    
        location /
        {
    
           proxy_next_upstream http_502 http_504  error timeout invalid_header;
                           proxy_pass        http://sdk_groups;
                           proxy_set_header   Host             $host;
                           proxy_set_header   X-Client        $remote_addr;
                           proxy_set_header   X-Forwarded-For  $proxy_add_x_forwarded_for;
        }
    
        location /NginxStatus
        {
        stub_status on;
        access_log off;
        allow 10.1.0.0/16;
        allow 172.16.0.0/16;
        allow 59.108.97.146;
        deny all;
       }
        access_log  logs/sdk_acc.log  sdklogs;
            error_log logs/sdk_error.log  ;
      }
    
        server
      {
        listen       80;
        server_name  lopsell.uuzz.com;
        index index.html index.htm index.jsp;
    
        location /
        {
    
           proxy_next_upstream http_502 http_504  error timeout invalid_header;
                           proxy_pass        http://sell_groups;
                           proxy_set_header   Host             $host;
                           proxy_set_header   X-Client        $remote_addr;
                           proxy_set_header   X-Forwarded-For  $proxy_add_x_forwarded_for;
        }
    
        location /NginxStatus
        {
        stub_status on;
        access_log off;
        allow 10.1.0.0/16;
        allow 172.16.0.0/16;
        allow 59.108.97.146;
        deny all;
       }
    
    
        access_log  logs/sell_acc.log  selllogs;
            error_log logs/sell_error.log  ;
      }
    
    }

     Nginx配置文件解析:

    user                  nginx nginx;    #定义Nginx运行的用户和用户组
    worker_processes      1;              #nginx进程数,建议设置为等于CPU总核心数
    worker_rlimit_nofile  1024;           #一个nginx进程打开的最多文件描述符数目,理论值应该是最多打开文件数(系统的值ulimit -n)与nginx进程数相除,但是nginx分配请求并不均匀,所以建议与ulimit -n的值保持一致
    error_log        /var/log/nginx/error.log info; #全局错误日志定义类型,[ debug | info | notice | warn | error | crit ]
    pid                   /var/run/nginx.pid; #进程文件 
    
    #工作模式与连接数上限
    events {
        use                 epoll; #设置用于复用客户端线程的轮询方法,use [ kqueue | rtsig | epoll | /dev/poll | select | poll ]; epoll是多路复用IO(I/O Multiplexing)中的一种方式,但是仅用于linux2.6以上内核,可以大大提高nginx的性能
        worker_connections  1024;  #单个进程最大连接数(最大连接数=连接数*进程数)
        multi_accept        on;    #收到一个新连接通知后接受尽可能多的连接
    }
    
    #http服务器(详细参数:http://nginx.org/en/docs/http/ngx_http_core_module.html)
    http {
        include           /etc/nginx/mime.types; #文件扩展名与文件类型映射表
        default_type      application/octet-stream; #默认文件类型
        access_log        off;   #访问日志。关闭这个选项可以让读取磁盘IO操作更快(aka,YOLO)
        charset           utf-8; #默认编码
        server_tokens     off;   #关闭在错误页面中的nginx版本数字,这样对于安全性是有好处的
        sendfile          on;    #开启高效文件传输模式,sendfile指令指定nginx是否调用sendfile函数来输出文件,对于普通应用设为 on,如果用来进行下载等应用磁盘IO重负载应用,可设置为off,以平衡磁盘与网络I/O处理速度,降低系统的负载。注意:如果图片显示不正常把这个改成off
        autoindex         off;   #开启目录列表访问,合适下载服务器,默认关闭
        tcp_nopush        on;    #在一个数据包里发送所有头文件,而不一个接一个的发送。防止网络阻塞
        tcp_nodelay       on;    #不缓存数据,而是一段一段的发送。当需要及时发送数据时,就应该给应用设置这个属性,这样发送一小块数据信息时就不能立即得到返回值。防止网络阻塞
        keepalive_timeout 120;   #长连接超时时间,单位是秒
        
        client_header_buffer_size    32k;   #客户请求头缓冲大小
        large_client_header_buffers  4 64k; #nginx默认会用 client_header_buffer_size 这个buffer来读取header值,如果header过大,它会使用 large_client_header_buffers 来读取
        client_max_body_size         8m;    #指定允许客户端连接的最大请求实体大小,它出现在请求头部的Content-Length字段
    
        open_file_cache              max=1000 inactive=20s; #缓存是否启用,如果启用,将记录文件以下信息: 打开的文件描述符、大小信息、修改时间、存在的目录信息、在搜索文件过程中的错误信息,max指定缓存的最大数目,如果缓存溢出,最长使用过的文件(LRU)将被移除
        open_file_cache_errors       on;    #是否在搜索一个文件是记录cache错误,默认值: off
        open_file_cache_min_uses     2;     #在open_file_cache指令无效的参数中一定的时间范围内可以使用的最小文件数,如果使用更大的值,文件描述符在cache中总是打开状态,默认值:1 
        open_file_cache_valid        30s;   #何时需要检查open_file_cache中缓存项目的有效信息。默认值:60s
        
        #FastCGI相关参数是为了改善网站的性能:减少资源占用,提高访问速度。下面参数看字面意思都能理解
        fastcgi_connect_timeout      300;
        fastcgi_send_timeout         300;
        fastcgi_read_timeout         300;
        fastcgi_buffer_size          64k;
        fastcgi_buffers              4 64k; 
        fastcgi_busy_buffers_size    128k;
        fastcgi_temp_file_write_size 128k;
    
        #gzip模块设置
        gzip            on;    #开启gzip压缩输出
        gzip_static     on;    #nginx对于静态文件的处理模块,该模块可以读取预先压缩的gz文件,这样可以减少每次请求进行gzip压缩的CPU资源消耗。该模块启用后,nginx首先检查是否存在请求静态文件的gz结尾的文件,如果有则直接返回该gz文件内容。为了要兼容不支持gzip的浏览器,启用gzip_static模块就必须同时保留原始静态文件和gz文件。这样的话,在有大量静态文件的情况下,将会大大增加磁盘空间。我们可以利用nginx的反向代理功能实现只保留gz文件。
        gzip_disable    "MSIE [1-6].(?!.*SV1)";    #禁用IE6的gzip压缩,IE6的某些版本对gzip的压缩支持很不好,会造成页面的假死
        gzip_min_length 1k;    #设置允许压缩的页面最小字节,页面字节数从header头的Content-Length中获取,默认值是0,不管页面多大都进行压缩。建议设置成大于1K。如果小于1K可能越压越大
        gzip_buffers    4 16k; #压缩缓冲区,设置系统获取几个单位的缓存用于存储gzip的压缩结果数据流。4 16k代表以16k为单位,安装原始数据大小以16k为单位的4倍申请内存 。如果没有设置,默认值是申请跟原始数据相同大小的内存空间去存储gzip压缩结果
        gzip_comp_level 4;     #压缩级别 1-9,默认值:1(建议选择为4),级别越高压缩率越大,当然压缩时间也就越长(传输快但比较消耗cpu)
        gzip_types      text/xml text/css application/javascript; #压缩类型,匹配MIME类型进行压缩,设置哪压缩种文本文件可参考 conf/mime.types,(无论是否指定)text/html默认已经压缩,默认不对js/css文件进行压缩,不能用通配符 text/*
        gzip_proxied    off;    #作为反向代理的时候启用,开启或者关闭后端服务器返回的结果,匹配的前提是后端服务器必须要返回包含"Via"的 header头。
                                #默认值:off [off|expired|no-cache|no-store|private|no_last_modified|no_etag|auth|any]
                                #off - 关闭所有的代理结果数据的压缩
                                #expired - 启用压缩,如果header头中包含 "Expires" 头信息
                                #no-cache - 启用压缩,如果header头中包含 "Cache-Control:no-cache" 头信息
                                #no-store - 启用压缩,如果header头中包含 "Cache-Control:no-store" 头信息
                                #private - 启用压缩,如果header头中包含 "Cache-Control:private" 头信息
                                #no_last_modified - 启用压缩,如果header头中不包含 "Last-Modified" 头信息
                                #no_etag - 启用压缩 ,如果header头中不包含 "ETag" 头信息
                                #auth - 启用压缩 , 如果header头中包含 "Authorization" 头信息
                                #any - 无条件启用压缩
        gzip_vary       on;     #和http头有关系,加个vary头,给代理服务器用的,有的浏览器支持压缩,有的不支持,所以避免浪费不支持的也压缩,所以根据客户端的HTTP头来判断,是否需要压缩
        limit_zone      crawler $binary_remote_addr 10m; #开启限制IP连接数的时候需要使用
    
        #upstream的负载均衡
        upstream luyucheng {
            ip_hash; #每个请求按访问ip的hash结果分配,这样每个访客固定访问一个后端服务器,可以解决session的问题
            
            server 192.168.80.1:80 weight=1; #weigth参数表示权重,权重越高被分配到的几率越大
            server 192.168.80.2:80 down;     #down表示当前的server暂时不参与负载
            server 192.168.80.3:80 backup;   #当所有的非备机(non-backup)都宕机(down)或者繁忙(busy)的时候,就只使用由 backup 标注的备机。必须要注意的是,backup 不能和 ip_hash 关键字一起使用
            server 192.168.80.4:80 max_fails=3 fail_timeout=30s; #最大的重试次数,和重试时间间隔。最大失败次数为3,也就是最多进行3次尝试,且超时时间为30秒。max_fails的默认值为 1,fail_timeout的默认值是 10s。传输失败的情形,由proxy_next_upstream或fastcgi_next_upstream指定。而且可以使用proxy_connect_timeout和proxy_read_timeout控制upstream 响应时间。upstream中只有一个server时,max_fails和fail_timeout参数可能不会起作用
            
            fair; #按后端服务器的响应时间来分配请求,响应时间短的优先分配
            
            hash $request_uri; #按访问url的hash结果来分配请求,使每个url定向到同一个后端服务器,后端服务器为缓存时比较有效。注意:在upstream中加入hash语句,server语句中不能写入weight等其他的参数
            hash_method crc32; #使用的hash算法
        }
        
        #虚拟主机的配置
        server {
            listen       80;
            server_name  luyucheng.cnblogs.com cnblogs.com; #域名可以有多个,用空格隔开
            index        index.html index.htm index.php;
            root         /www/cnblogs;
            
            #日志格式设定
            log_format    access '$remote_addr - $remote_user [$time_local] "$request" '
            '$status $body_bytes_sent "$http_referer" '
            '"$http_user_agent" $http_x_forwarded_for';
    
            access_log    /var/log/nginx/access.log access; #定义本虚拟主机的访问日志
            
            #定义错误提示页面
            error_page   500 502 503 504 /50x.html;  
            location = /50x.html {
                root     /root;
            }
    
            #对 "/" 启用反向代理
            location / {
                proxy_pass          http://luyucheng;
                proxy_redirect      off;
                proxy_set_header    X-Real-IP $remote_addr;
                proxy_set_header    X-Forwarded-For $proxy_add_x_forwarded_for; #后端的Web服务器可以通过X-Forwarded-For获取用户真实IP
    
                #以下是一些反向代理的配置
                proxy_set_header Host      $host;
                client_max_body_size       10m;  #允许客户端请求的最大单文件字节数
                client_body_buffer_size    128k; #缓冲区代理缓冲用户端请求的最大字节数
                proxy_connect_timeout      90;   #nginx跟后端服务器连接超时时间(代理连接超时)
                proxy_send_timeout         90;   #后端服务器数据回传时间(代理发送超时)
                proxy_read_timeout         90;   #连接成功后,后端服务器响应时间(代理接收超时)
                proxy_buffer_size          4k;   #设置代理服务器(nginx)保存用户头信息的缓冲区大小
                proxy_buffers              4 32k;#proxy_buffers缓冲区,网页平均在32k以下的设置
                proxy_busy_buffers_size    64k;  #高负荷下缓冲大小(proxy_buffers*2)
                proxy_temp_file_write_size 64k;  #设定缓存文件夹大小,大于这个值,将从upstream服务器传
            }
            
            #PHP 脚本请求全部转发到 FastCGI处理. 使用FastCGI默认配置.
            location ~ .php$ {
                root            /root;
                fastcgi_pass    127.0.0.1:9000;
                fastcgi_index   index.php;
                fastcgi_param   SCRIPT_FILENAME $document_root$fastcgi_script_name;
                include         fastcgi_params;
            }
    
            #设定查看Nginx状态的地址
            location /NginxStatus {
                stub_status    on;
                access_log     off;
            }
            
            #HTTP Auth Basic模块,该模块采用基于HTTP基本身份验证的用户名和密码登录方式,来保护你的虚拟主机或目录
            location /NginxAuth{
                auth_basic              "NginxAuth";   #用于指定弹出的用户名和密码登录框中提示的名称
                auth_basic_user_file    conf/htpasswd; #用于设置htpasswd密码文件,htpasswd文件的内容可以用apache提供的htpasswd工具来产生
            }
    
            #所有静态文件由nginx直接读取
            location ~ .*.(htm|html|gif|jpg|jpeg|png|bmp|swf|ioc|rar|zip|txt|flv|mid|doc|ppt|pdf|xls|mp3|wma)$ { #缓存时间设置      
                expires  15d; #d(天) h(时) m(分) s(秒)
            }
    
            #图片防盗链
            location ~* .(gif|jpg|png)$ { #表示对gif、jpg、png后缀的文件实行防盗链
                valid_referers none blocked luyucheng.cnblogs.com *.cnblogs.com; #表示对url来源进行判断,允许文件链出的域名白名单, cnblogs.com这个指的是子域名,域名与域名之间使用空格隔开
                if ($invalid_referer) {
                    rewrite ^/ http://www.cnblogs.com/404.jpg; #如果不是指定来源就跳转到http://www.cnblogs.com/404.jpg页面,当然直接返回403也是可以的。
                    #return 403;
                }
            }
    
            #禁止访问 .htxxx 文件
            location ~ /.ht {
                deny  all;
            }
        }
    }
  • 相关阅读:
    F查询和Q查询
    Django ORM 常用字段和参数
    Django的路由系统
    Django模板系统
    Django中的视图(view)
    Django应用app创建及ORM
    TP90,TP99,TP999,MAX含义
    TDD、BDD、ATDD、DDD 软件驱动开发模式比较
    liunx 安装chrome的方法
    nginx 反向代理mysql
  • 原文地址:https://www.cnblogs.com/wjoyxt/p/3802523.html
Copyright © 2020-2023  润新知