精华内容
下载资源
问答
  • nginx配置文件详解

    2017-11-21 17:56:52
    nginx配置文件详解

    #user  nobody nobody;

    Nginx用户及组,window下不指定


    worker_processes  4;

    工作进程的数目(nginx工作时分主进程和若干个工作进程)。根据硬件调整,通常等于CPU核芯总数。


    #error_log  logs/error.log;
    #error_log  logs/error.log  notice;
    #error_log  logs/error.log  info;

    错误日志存放路径


    #pid        logs/nginx.pid;

    pid文件存放路径


    events {
        worker_connections  1024;
    }

    一个工作进程可处理的连接数量


    http {
        include       mime.types;
        default_type  application/octet-stream;

        log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                          '$status $body_bytes_sent "$http_referer" '
                          '"$http_user_agent" "$http_x_forwarded_for"';
    
        access_log  logs/access.log  main;

    这里配置access日志文件的格式和路径,格式中的变量含义如下:

    $remote_addr:用以记录客户端的ip地址;

    $http_x_forwarded_for:由代理服务器发送过来的真实客户端ip地址;

    $remote_user:用来记录客户端用户名称;

    $time_local: 用来记录访问时间与时区;

    $request: 用来记录请求的url与http协议;

    $status: 用来记录请求状态;成功是200,

    $body_bytes_sent :记录发送给客户端文件主体内容大小;

    $http_referer:用来记录从那个页面链接访问过来的;

    $http_user_agent:记录客户浏览器的相关信息;

    下面是此配置的实际记录示例:

    127.0.0.1 - - [20/Nov/2017:17:45:22 +0800] "GET / HTTP/1.1" 200 159 "-" "Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:57.0) Gecko/20100101 Firefox/57.0" "-"


        sendfile        on;
        #tcp_nopush     on;

    开启高效文件传输模式,sendfile指令指定nginx是否调用sendfile函数来输出文件,减少用户空间到内核空间的上下文切换。对于普通应用设为 on,如果用来进行下载等应用磁盘IO重负载应用,可设置为off,以平衡磁盘与网络I/O处理速度,降低系统的负载。

    tcp_nopush:
    允许或禁止使用socke的TCP_CORK的选项,此选项仅在使用sendfile的时候使用


        #keepalive_timeout  0;
        keepalive_timeout  65;
    

    长连接超时时间,单位是秒,这个参数很敏感,涉及浏览器的种类、后端服务器的超时设置、操作系统的设置,可以另外起一片文章了。长连接请求大量小文件的时候,可以减少重建连接的开销,但假如有大文件上传,65s内没上传完成会导致失败。如果设置时间过长,用户又多,长时间保持连接会占用大量资源。


        #send_timeout :

    用于指定响应客户端的超时时间。这个超时仅限于两个连接活动之间的时间,如果超过这个时间,客户端没有任何活动,Nginx将会关闭连接。


        client_max_body_size 500m

    允许客户端请求的最大单文件字节数。如果有上传较大文件,请设置它的限制值

        client_body_buffer_size 128k

    缓冲区代理缓冲用户端请求的最大字节数,可尽量设置得大一些


        #gzip  on;

    开启gzip压缩传输,具体配置项目如下:

    gzip_min_length 1k :
    设置允许压缩的页面最小字节数,页面字节数从header头得content-length中进行获取。默认值是20。建议设置成大于1k的字节数,小于1k可能会越压越大。
    gzip_buffers 4 16k :
    设置系统获取几个单位的缓存用于存储gzip的压缩结果数据流。4 16k代表以16k为单位,安装原始数据大小以16k为单位的4倍申请内存。
    gzip_http_version 1.0 :
    用于识别 http 协议的版本,早期的浏览器不支持 Gzip 压缩,用户就会看到乱码,所以为了支持前期版本加上了这个选项,如果你用了 Nginx 的反向代理并期望也启用 Gzip 压缩的话,由于末端通信是 http/1.0,故请设置为 1.0。
    gzip_comp_level 6 :
    gzip压缩比,1压缩比最小处理速度最快,9压缩比最大但处理速度最慢(传输快但比较消耗cpu)
    gzip_types :
    匹配mime类型进行压缩,无论是否指定,"text/html"类型总是会被压缩的。
    gzip_proxied any :
    Nginx作为反向代理的时候启用,决定开启或者关闭后端服务器返回的结果是否压缩,匹配的前提是后端服务器必须要返回包含"Via"的 header头。
    gzip_vary on :
    和http头有关系,会在响应头加个 Vary: Accept-Encoding ,可以让前端的缓存服务器缓存经过gzip压缩的页面,例如,用Squid缓存经过Nginx压缩的数据。。


        autoindex            on;
        autoindex_exact_size off;
        autoindex_localtime  on;

    自动列出目录

    autoindex_exact_size:

    默认为on,显示出文件的确切大小,单位是bytes。改为off后,显示出文件的大概大小,单位是kB或者MB或者GB

    autoindex_localtime:

    默认为off,显示的文件时间为GMT时间。改为on后,显示的文件时间为文件的服务器时间



        server {
            listen       80;

    监听端口,也可以写成listen *:80、listen 127.0.0.1:80等形式。


            server_name  localhost;

    服务器名,如localhost、www.example.com,可以通过正则匹配。


            charset utf-8;


            access_log  logs/host.access.log  main;

    这里指定了针对这台虚拟服务器的日志文件路径和使用的格式


            location / {
                #root   html;
                root   F:/server/www;
                index  index.html index.php index.htm;
            }

    每个server都可以配置多个location,因为server只是指定了服务器名,对于不同的访问路径,可以有不同的配置,比如以下这些配置:

    location / {                   通用匹配, 如果没有其它匹配,任何请求都会匹配到

    location = /50x.html {   精确匹配URL: 服务器名/50x.html

    location ~ \.php$ {       区分大小写的正则匹配:以.php结尾的URL


            error_page  404              /404.html;
    
    
            # redirect server error pages to the static page /50x.html
            #
            error_page   500 502 503 504  /50x.html;
    
    

    
    

    指定404及其他错误页面的路径及网页文件

            location = /50x.html {
                root   html;
            }
    
            # proxy the PHP scripts to Apache listening on 127.0.0.1:80
            #
            #location ~ \.php$ {
            #    proxy_pass   http://127.0.0.1;
            #}
    
            # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
            #
             location ~ \.php$ {
            #    root           html;
                 root           F:/server/www;
                 fastcgi_pass   127.0.0.1:9000;
                 fastcgi_index  index.php;
                 fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
                 include        fastcgi_params;
             }
    
            # deny access to .htaccess files, if Apache's document root
            # concurs with nginx's one
            #
            #location ~ /\.ht {
            #    deny  all;
            #}
        }
    
    
        server {
            listen       80;
            server_name  cmseasy;
    
            charset utf-8;
    
            #access_log  logs/host.access.log  main;
    
            location / {
                #root   html;
                root   F:/server/cmseasy;
                index  index.html index.php index.htm;
            }
    
            #error_page  404              /404.html;
    
            # redirect server error pages to the static page /50x.html
            #
            error_page   500 502 503 504  /50x.html;
            location = /50x.html {
                root   html;
            }
    
            # proxy the PHP scripts to Apache listening on 127.0.0.1:80
            #
            #location ~ \.php$ {
            #    proxy_pass   http://127.0.0.1;
            #}
    
            # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
            #
             location ~ \.php$ {
            #    root           html;
                 root           F:/server/cmseasy;
                 fastcgi_pass   127.0.0.1:9000;
                 fastcgi_index  index.php;
                 fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
                 include        fastcgi_params;
             }
    
            # deny access to .htaccess files, if Apache's document root
            # concurs with nginx's one
            #
            #location ~ /\.ht {
            #    deny  all;
            #}
        }
    
    
    
    
        # another virtual host using mix of IP-, name-, and port-based configuration
        #
        #server {
        #    listen       8000;
        #    listen       somename:8080;
        #    server_name  somename  alias  another.alias;
    
        #    location / {
        #        root   html;
        #        index  index.html index.htm;
        #    }
        #}
    
    
        # HTTPS server
        #
        #server {
        #    listen       443 ssl;
        #    server_name  localhost;
    
        #    ssl_certificate      cert.pem;
        #    ssl_certificate_key  cert.key;
    
        #    ssl_session_cache    shared:SSL:1m;
        #    ssl_session_timeout  5m;
    
        #    ssl_ciphers  HIGH:!aNULL:!MD5;
        #    ssl_prefer_server_ciphers  on;
    
        #    location / {
        #        root   html;
        #        index  index.html index.htm;
        #    }
        #}
    
    }
    





    展开全文
  • Nginx配置文件详解

    2020-01-22 11:26:30
    文章目录Nginx配置文件详解1、基本配置2、events配置3、http配置3.1、http...Nginx配置文件详解 配置文件 : nginx.conf 1、基本配置 配置标题 配置含义 user nobody 配置worker进程运行用户 worker_proc...

    Nginx配置文件nginx.conf详解

    配置文件 : nginx.conf

    1、基本配置

    配置标题 配置含义
    user nobody 配置worker进程运行用户
    worker_processes 配置工作进程数目,根据硬件调整,通过等于CPU数量或者两倍CPU数量
    error_log 配置全局错误日志及类型,[debug 、 info 、 notice 、 warn 、 error 、crit ]默认是error
    pid 配置进程pid文件

    2、events配置

    配置标题 配置含义
    worker_connections 配置每个worker进程连接数上限,nginx支持的总连接数就等于worker-processes * worker_connections

    3、http配置

    3.1、http配置 - 基本配置

    配置标题 配置含义
    include 配置nginx支持哪些多媒体类型,再conf/mime.types查看具体支持哪些格式
    default_type 默认文件类型
    sendfile 开启高效文件传输模式
    keepalive_timeout 长连接超时时间,单位是秒

    3.2、http配置 - 多个server配置

    配置标题 配置含义
    include 配置nginx支持哪些多媒体类型,再conf/mime.types查看具体支持哪些格式
    listen 监听端口
    server_name 配置服务名
    location 默认的斜杠/的请求,当访问路径中有斜杠/,就会被location匹配到并进行处理
    location中root root是配置服务器的默认网站跟目录,默认为nginx安装目录下的html文件夹
    location中index 配置首页文件的名称
    error_page 配置错误跳转页面

    3.3、https配置 - 多个server配置

    配置标题 配置含义
    include 配置nginx支持哪些多媒体类型,再conf/mime.types查看具体支持哪些格式
    listen 监听端口
    server_name 配置服务名
    location 默认的斜杠/的请求,当访问路径中有斜杠/,就会被location匹配到并进行处理
    location中root root是配置服务器的默认网站跟目录,默认为nginx安装目录下的html文件夹
    location中index 配置首页文件的名称
    error_page 配置错误跳转页面
    ssl_certificate 证书配置
    证书密钥 密钥配置
    展开全文
  • Nginx 配置文件详解

    2019-11-24 13:42:18
    Nginx 配置文件详解Nginx的配置文件结构Nginx的全局配置HTTP服务器配置HttpGzip模块配置负载均衡配置server虚拟主机配置location URL匹配配置StubStatus模块配置配置实例1. nginx 配置 tomcat 集群反向代理2. 多个...

    Nginx的配置文件结构

      Nginx 的配置文件 nginx.conf 位于其安装目录的 conf 目录下。
    nginx.conf 由多个块组成,最外面的块是 main,main 包含 Events 和 HTTP,HTTP 包含 upstream 和多个 Server,Server 又包含多个 location:main(全局设置)、server(主机设置)、upstream(负载均衡服务器设置)和 location(URL 匹配特定位置的设置)。

    在这里插入图片描述

    • main 块设置的指令将影响其他所有设置;
    • server 块的指令主要用于指定主机和端口;
    • upstream 指令主要用于负载均衡,设置一系列的后端服务器;
    • location 块用于匹配网页位置。

      这四者之间的关系式:server 继承 main,location 继承 server,upstream 既不会继承其他设置也不会被继承。
    在这四个部分当中,每个部分都包含若干指令,这些指令主要包含 Nginx 的主模块指令、事件模块指令、HTTP 核心模块指令,同时每个部分还可以使用其他 HTTP 模块指令,例如 Http SSL 模块、HttpGzip Static 模块和 Http Addition 模块等。

    Nginx的全局配置

    user nobody nobody;
    worker_processes 2;
    error_log logs/error.log notice;
    pid logs/nginx.pid;
    worker_rlimit_nofile 65535;
     
    events{
    use epoll;
    worker_connections 65536;
    }
    

    每个配置选项的含义解释如下:

    • user 是个主模块指令,指定 Nginx Worker 进程运行用户以及用户组,默认由 nobody 账号运行。

    • worker_processes 是个主模块指令,指定了 Nginx 要开启的进程数。每个 Nginx 进程平均耗费 10M~12M 内存。建议指定和 CPU 的数量一致即可。

    • error_log 是个主模块指令,用来定义全局错误日志文件。日志输出级别有 debug、info、notice、warn、error、crit 可供选择,其中,debug 输出日志最为最详细,而 crit 输出日志最少。

    • pid 是个主模块指令,用来指定进程 pid 的存储文件位置。

    • worker_rlimit_nofile 用于绑定 worker 进程和 CPU, Linux 内核 2.4 以上可用。

    • events 事件指令是设定 Nginx 的工作模式及连接数上限:
      use 是个事件模块指令,用来指定 Nginx 的工作模式。Nginx 支持的工作模式有 select、poll、kqueue、epoll、rtsig 和 /dev/poll。其中 select 和 poll 都是标准的工作模式,kqueue 和 epoll 是高效的工作模式,不同的是 epoll 用在 Linux 平台上,而 kqueue 用在 BSD 系统中。对于 Linux 系统,epoll 工作模式是首选。

    • worker_connections 也是个事件模块指令,用于定义 Nginx 每个进程的最大连接数,默认是1024。最大客户端连接数由 worker_processes 和 worker_connections 决定,Max_client=worker_processes*worker_connections。在作为反向代理时,max_clients 变为:max_clients = worker_processes * worker_connections/4。
      进程的最大连接数受 Linux 系统进程的最大打开文件数限制,在执行操作系统命令 “ulimit -n 65536” 后 worker_connections 的设置才能生效

    HTTP服务器配置

    http{
        include conf/mime.types;
        default_type application/octet-stream;
        log_format main '$remote_addr - $remote_user [$time_local] '
        '"$request" $status $bytes_sent '
        '"$http_referer" "$http_user_agent" '
        '"$gzip_ratio"';
        log_format download '$remote_addr - $remote_user [$time_local] '
        '"$request" $status $bytes_sent '
        '"$http_referer" "$http_user_agent" '
        '"$http_range" "$sent_http_content_range"';
        client_max_body_size 20m;
        client_header_buffer_size 32K;
        large_client_header_buffers 4 32k;
        Sendfile on;
        tcp_nopush on;
        tcp_nodelay on;
        keepalive_timeout 60;
        client_header_timeout 10;
        client_body_timeout 10;
        send_timeout 10;
    

      下面详细介绍下这段代码中每个配置选项的含义。

    • include 是个主模块指令,实现对配置文件所包含的文件的设定,可以减少主配置文件的复杂度。类似于 Apache 中的 include 方法。

    • default_type 属于 HTTP 核心模块指令,这里设定默认类型为二进制流,也就是当文件类型未定义时使用这种方式,例如在没有配置 PHP 环境时,Nginx 是不予解析的,此时,用浏览器访问 PHP 文件就会出现下载窗口。

      下面的代码实现对日志格式的设定:

        log_format main '$remote_addr - $remote_user [$time_local] '
        '"$request" $status $bytes_sent '
        '"$http_referer" "$http_user_agent" '
        '"$gzip_ratio"';
        log_format download '$remote_addr - $remote_user [$time_local] '
        '"$request" $status $bytes_sent '
        '"$http_referer" "$http_user_agent" '
        '"$http_range" "$sent_http_content_range"';
    

      log_format 是 Nginx 的 HttpLog 模块指令,用于指定 Nginx 日志的输出格式。main 为此日志输出格式的名称,可以在下面的 access_log 指令中引用。

    • client_max_body_size 用来设置允许客户端请求的最大的单个文件字节数;

    • client_header_buffer_size 用于指定来自客户端请求头的 headerbuffer 大小。对于大多数请求,1K 的缓冲区大小已经足够,如果自定义了消息头或有更大的 Cookie,可以增加缓冲区大小。这里设置为 32K;

    • large_client_header_buffers 用来指定客户端请求中较大的消息头的缓存最大数量和大小, “4” 为个数,“128K” 为大小,最大缓存量为 4 个 128K;

    • sendfile 参数用于开启高效文件传输模式。将 tcp_nopush 和 tcp_nodelay 两个指令设置为 on 用于防止网络阻塞;

    • keepalive_timeout 设置客户端连接保持活动的超时时间。在超过这个时间之后,服务器会关闭该连接;

    • client_header_timeout 设置客户端请求头读取超时时间。如果超过这个时间,客户端还没有发送任何数据,Nginx 将返回 “Request time out(408)” 错误;

    • client_body_timeout 设置客户端请求主体读取超时时间。如果超过这个时间,客户端还没有发送任何数据,Nginx 将返回 “Request time out(408)” 错误,默认值是 60;

    • send_timeout 指定响应客户端的超时时间。这个超时仅限于两个连接活动之间的时间,如果超过这个时间,客户端没有任何活动,Nginx 将会关闭连接。

    HttpGzip模块配置

      下面配置 Nginx 的 HttpGzip 模块。这个模块支持在线实时压缩输出数据流。
    看是否安装了 HttpGzip 模块:

    [root@vps ~]# /opt/nginx/sbin/nginx  -V
    nginx version: nginx/1.0.14
    built by gcc 4.4.6 20110731 (Red Hat 4.4.6-3) (GCC)
    configure arguments: --with-http_stub_status_module --with-http_gzip_static_module --prefix=/opt/nginx
    

      通过 /opt/nginx/sbin/nginx -V 命令可以查看安装 Nginx 时的编译选项,由输出可知,我们已经安装了 HttpGzip 模块。

      下面是 HttpGzip 模块在 Nginx 配置中的相关属性设置:

    gzip on;
    gzip_min_length 1k;
    gzip_buffers 4 16k;
    gzip_http_version 1.1;
    gzip_comp_level 2;
    gzip_types text/plain application/x-javascript text/css application/xml;
    gzip_vary on;
    
    • gzip用于设置开启或者关闭 gzip 模块,“gzip on” 表示开启 GZIP 压缩,实时压缩输出数据流;

    • gzip_min_length 设置允许压缩的页面最小字节数,页面字节数从 header 头的Content-Length 中获取。默认值是 0,不管页面多大都进行压缩。建议设置成大于 1K 的字节数,小于 1K 可能会越压越大;

    • gzip_buffers 表示申请 4 个单位为 16K 的内存作为压缩结果流缓存,默认值是申请与原始数据大小相同的内存空间来存储 gzip 压缩结果;

    • gzip_http_version 用于设置识别 HTTP 协议版本,默认是 1.1,目前大部分浏览器已经支持 GZIP 解压,使用默认即可;

    • gzip_comp_level 用来指定 GZIP 压缩比,1 压缩比最小,处理速度最快;9 压缩比最大,传输速度快,但处理最慢,也比较消耗 cpu 资源;

    • gzip_types 用来指定压缩的类型,无论是否指定,“text/html” 类型总是会被压缩的;

    • gzip_vary 选项可以让前端的缓存服务器缓存经过 GZIP 压缩的页面,例如用 Squid 缓存经过 Nginx 压缩的数据。

    负载均衡配置

      下面设定负载均衡的服务器列表:

    upstream cszhi.com{
    ip_hash;
        server 192.168.8.11:80;
        server 192.168.8.12:80 down;
        server 192.168.8.13:8009 max_fails=3 fail_timeout=20s;
        server 192.168.8.146:8080;
    }
    

      upstream 是 Nginx 的 HTTP Upstream 模块,这个模块通过一个简单的调度算法来实现客户端 IP 到后端服务器的负载均衡。
      在上面的设定中,通过 upstream 指令指定了一个负载均衡器的名称 cszhi.com。这个名称可以任意指定,在后面需要的地方直接调用即可。

      Nginx 的负载均衡模块目前支持 4 种调度算法,下面进行分别介绍,其中后两项属于第三方的调度方法。

    • 轮询(默认):每个请求按时间顺序逐一分配到不同的后端服务器,如果后端某台服务器宕机,故障系统被自动剔除,使用户访问不受影响;

    • Weight:指定轮询权值,Weight 值越大,分配到的访问机率越高,主要用于后端每个服务器性能不均的情况下;

    • ip_hash:每个请求按访问 IP 的 hash 结果分配,这样来自同一个 IP 的访客固定访问一个后端服务器,有效解决了动态网页存在的session共享问题;

    • fair:比上面两个更加智能的负载均衡算法。此种算法可以依据页面大小和加载时间长短智能地进行负载均衡,也就是根据后端服务器的响应时间来分配请求,响应时间短的优先分配。Nginx 本身是不支持 fair 的,如果需要使用这种调度算法,必须下载 Nginx 的 upstream_fair 模块;

    • url_hash:按访问 url 的 hash 结果来分配请求,使每个 url 定向到同一个后端服务器,可以进一步提高后端缓存服务器的效率。Nginx 本身是不支持 url_hash 的,如果需要使用这种调度算法,必须安装 Nginx 的 hash 软件包。

      在 HTTP Upstream 模块中,可以通过 server 指令指定后端服务器的 IP 地址和端口,同时还可以设定每个后端服务器在负载均衡调度中的状态。常用的状态有:

    • down:表示当前的 server 暂时不参与负载均衡;

    • backup:预留的备份机器。当其他所有的非 backup 机器出现故障或者忙的时候,才会请求 backup 机器,因此这台机器的压力最轻;

    • max_fails:允许请求失败的次数,默认为1。当超过最大次数时,返回proxy_next_upstream 模块定义的错误;

    • fail_timeout:在经历了 max_fails 次失败后,暂停服务的时间。max_fails 可以和 fail_timeout 一起使用。

      注意,当负载调度算法为 ip_hash 时,后端服务器在负载均衡调度中的状态不能是 weight 和 backup。

    server虚拟主机配置

      下面介绍对虚拟主机的配置。
      建议将对虚拟主机进行配置的内容写进另外一个文件,然后通过 include 指令包含进来,这样更便于维护和管理。

    server{
        listen 80;
        server_name 192.168.8.18 cszhi.com;
        index index.html index.htm index.php;
        root /wwwroot/www.cszhi.com
        charset gb2312;
        access_log logs/www.ixdba.net.access.log main;
    
    • server 标志定义虚拟主机开始。

    • listen 用于指定虚拟主机的服务端口。

    • server_name 用来指定 IP 地址或者域名,多个域名之间用空格分开。

    • index 用于设定访问的默认首页地址。

    • root 指令用于指定虚拟主机的网页根目录,这个目录可以是相对路径,也可以是绝对路径。
      Charset 用于设置网页的默认编码格式。

    • access_log 用来指定此虚拟主机的访问日志存放路径,最后的 main 用于指定访问日志的输出格式。

    location URL匹配配置

      URL 地址匹配是进行 Nginx 配置中最灵活的部分。 location 支持正则表达式匹配,也支持条件判断匹配,用户可以通过 location 指令实现 Nginx 对动、静态网页进行过滤处理。使用 location URL 匹配配置还可以实现反向代理,用于实现 PHP 动态解析或者负载负载均衡。

      以下这段设置是通过 location 指令来对网页 URL 进行分析处理,所有扩展名以 .gif、.jpg、.jpeg、.png、.bmp、.swf 结尾的静态文件都交给 nginx 处理,而 expires 用来指定静态文件的过期时间,这里是 30 天。

    location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$ {
        root /wwwroot/www.cszhi.com;
        expires 30d;
    }
    

      以下这段设置是将 upload 和 html 下的所有文件都交给 nginx 来处理,当然,upload 和 html 目录包含在 /web/wwwroot/www.cszhi.com 目录中。

    location ~ ^/(upload|html)/ {
        root /web/wwwroot/www.cszhi.com;
        expires 30d;
    }
    

      在最后这段设置中,location 是对此虚拟主机下动态网页的过滤处理,也就是将所有以 .jsp 为后缀的文件都交给本机的 8080 端口处理。

    location ~ .*.php$ {
        index index.php;
        proxy_pass http://localhost:8080;
    }
    

    StubStatus模块配置

      StubStatus 模块能够获取 Nginx 自上次启动以来的工作状态,此模块非核心模块,需要在 Nginx 编译安装时手工指定才能使用此功能。

      以下指令实指定启用获取 Nginx 工作状态的功能。

    location /NginxStatus {
        stub_status on;
        access_log logs/NginxStatus.log;
        auth_basic "NginxStatus";
        auth_basic_user_file ../htpasswd;
    }
    
    • stub_status 设置为 “on” 表示启用 StubStatus 的工作状态统计功能。

    • access_log 用来指定 StubStatus 模块的访问日志文件。auth_basic 是 Nginx 的一种认证机制。

    • auth_basic_user_file 用来指定认证的密码文件,由于 Nginx 的 auth_basic 认证采用的是与 Apache 兼容的密码文件,因此需要用 Apache 的 htpasswd 命令来生成密码文件,例如要添加一个 test 用户,可以使用下面方式生成密码文件:

    /usr/local/apache/bin/htpasswd -c  /opt/nginx/conf/htpasswd test
    

      然后输入两次密码后确认之后添加用户成功。

      要查看 Nginx 的运行状态,可以输入 http://ip/NginxStatus ,输入创建的用户名和密码就可以看到 Nginx 的运行状态:

    Active connections: 1
    server accepts handled requests
    34561 35731 354399
    Reading: 0 Writing: 3 Waiting: 0
    

      Active connections 表示当前活跃的连接数,第三行的三个数字表示 Nginx当前总共处理了 34561 个连接, 成功创建次握手, 总共处理了 354399 个请求。最后一行的 Reading 表示 Nginx 读取到客户端 Header 信息数, Writing 表示 Nginx 返回给客户端的Header 信息数
    ,“Waiting” 表示 Nginx 已经处理完,正在等候下一次请求指令时的驻留连接数。

      在最后这段设置中,设置了虚拟主机的错误信息返回页面,通过 error_page 指令可以定制各种错误信息的返回页面。在默认情况下,Nginx 会在主目录的 html 目录中查找指定的返回页面,特别需要注意的是,这些错误信息的返回页面大小一定要超过 512K,否者会被 ie 浏览器替换为 ie 默认的错误页面。

    error_page 404 /404.html;
    error_page 500 502 503 504 /50x.html;
        location = /50x.html {
            root html;
        }
    }
    

    配置实例

    配置主机为 192.168.1.52、192.168.1.52,且 tomcat 中只有一个 root 项目。

    1. nginx 配置 tomcat 集群反向代理

    #user  nobody;
    worker_processes  1;
    
    error_log  logs/error.log;
    error_log  logs/error.log  notice;
    error_log  logs/error.log  info;
    
    pid        logs/nginx.pid;
    
    
    events {
        worker_connections  1024;
    }
    
    http {
    
    gzip              on;  
    gzip_min_length   1000;  
    gzip_types        text/plain text/css application/x-javascript;
    
    #设定负载均衡的服务器列表
    #weigth 参数表示权值,权值越高被分配到的几率越大
    upstream helptimely_52{
        server 192.168.1.52:8090 weight=1;
        server 192.168.1.53:8090 weight=1;
                    
    }
       
    server {
        #侦听的80端口
        listen       80;
        server_name  localhost;
        #设定查看 Nginx 状态的地址
        location /nginxstatus{
             stub_status on;
             access_log on;
             auth_basic "nginxstatus";
             auth_basic_user_file htpasswd;
        }
        #匹配以 jsp 结尾的,tomcat 的网页文件是以 jsp 结尾
        location / {
            index index.jsp;
            proxy_pass   http://helptimely_52;    #在这里设置一个代理,和 upstream 的名字一样
            #以下是一些反向代理的配置可删除
            proxy_redirect             off; 
            #后端的Web服务器可以通过X-Forwarded-For获取用户真实 IP
            proxy_set_header           Host $host; 
            proxy_set_header           X-Real-IP $remote_addr; 
            proxy_set_header           X-Forwarded-For $proxy_add_x_forwarded_for; 
            client_max_body_size       10m; #允许客户端请求的最大单文件字节数
            client_body_buffer_size    128k; #缓冲区代理缓冲用户端请求的最大字节数
            proxy_connect_timeout      300; #nginx跟后端服务器连接超时时间(代理连接超时)
            proxy_send_timeout         300; #后端服务器数据回传时间(代理发送超时)
            proxy_read_timeout         300; #连接成功后,后端服务器响应时间(代理接收超时)
            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服务器传
        }
    }
    
    }
    
    

    2. 多个tomcat多个项目配置

    多个 tomcat 及每个 tomcat 下有多个项目的时候,需要指定 tomcat 及其下的指定项目。

    #user  nobody;
    worker_processes  1;
    
    error_log  logs/error.log;
    error_log  logs/error.log  notice;
    error_log  logs/error.log  info;
    
    #pid存放路径
    pid        logs/nginx.pid;
    
    events {
        worker_connections  1024;
    }
    
    http {
    
    gzip              on;  
    gzip_min_length   1000;  
    gzip_types        text/plain text/css application/x-javascript;
    #该配置为多个 tomcat 及其下多个项目时配置
    #指定 tomcat 并指定项目
    server {
        #侦听的 80 端口
        listen       80;
        server_name  localhost;
        #设定查看 Nginx 状态的地址
        location /nginxstatus{
             stub_status on;
             access_log on;
             auth_basic "nginxstatus";
             auth_basic_user_file htpasswd;
        }
         #默认路径不能指定路径、配置原始配置
    	 location /{
                root   html;
                index  index.html index.htm;	
    	}    
            #为多个tomcat指定其下的某个项目,Timely50 为访问路径名
            #项目名后面需要加/,表示访问项目根路径
            location /Timely50/{
                 #指定访问路径
                 proxy_pass http://192.168.1.50:8090/Timely4000_01_hrb/;
                 #给访问url赋予正常访问值
                 proxy_set_header Host $host;
                 proxy_set_header X-Real-IP $remote_addr;
                 proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            }
            location /Timely52/{
                 proxy_pass http://192.168.1.52:8090/Timely4000/;
                 proxy_set_header Host $host;
                 proxy_set_header X-Real-IP $remote_addr;
                 proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            }
            location /Timely53/{
                 proxy_pass http://192.168.1.53:8090/Timely4000/;
                 proxy_set_header Host $host;
                 proxy_set_header X-Real-IP $remote_addr;
                 proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            }
    
    }
    }
    
    

    3.nginx 原生配置

    #user  nobody;
    worker_processes  1;
    
    #error_log  logs/error.log;
    #error_log  logs/error.log  notice;
    #error_log  logs/error.log  info;
    
    #pid        logs/nginx.pid;
    
    events {
        worker_connections  1024;
    }
    
    
    http {
        include       mime.types;
        default_type  application/octet-stream;
    
        #log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
        #                  '$status $body_bytes_sent "$http_referer" '
        #                  '"$http_user_agent" "$http_x_forwarded_for"';
    
        #access_log  logs/access.log  main;
    
        sendfile        on;
        #tcp_nopush     on;
    
        #keepalive_timeout  0;
        keepalive_timeout  65;
    
        #gzip  on;
    
        server {
            listen       80;
            server_name  localhost;
    
            #charset koi8-r;
    
            #access_log  logs/host.access.log  main;
    
            location / {
                root   html;
                index  index.html index.htm;
            }
    
            #error_page  404              /404.html;
    
            # redirect server error pages to the static page /50x.html
            #
            error_page   500 502 503 504  /50x.html;
            location = /50x.html {
                root   html;
            }
    
            # proxy the PHP scripts to Apache listening on 127.0.0.1:80
            #
            #location ~ \.php$ {
            #    proxy_pass   http://127.0.0.1;
            #}
    
            # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
            #
            #location ~ \.php$ {
            #    root           html;
            #    fastcgi_pass   127.0.0.1:9000;
            #    fastcgi_index  index.php;
            #    fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;
            #    include        fastcgi_params;
            #}
    
            # deny access to .htaccess files, if Apache's document root
            # concurs with nginx's one
            #
            #location ~ /\.ht {
            #    deny  all;
            #}
        }
    
    
        # another virtual host using mix of IP-, name-, and port-based configuration
        #
        #server {
        #    listen       8000;
        #    listen       somename:8080;
        #    server_name  somename  alias  another.alias;
    
        #    location / {
        #        root   html;
        #        index  index.html index.htm;
        #    }
        #}
    
    
        # HTTPS server
        #
        #server {
        #    listen       443 ssl;
        #    server_name  localhost;
    
        #    ssl_certificate      cert.pem;
        #    ssl_certificate_key  cert.key;
    
        #    ssl_session_cache    shared:SSL:1m;
        #    ssl_session_timeout  5m;
    
        #    ssl_ciphers  HIGH:!aNULL:!MD5;
        #    ssl_prefer_server_ciphers  on;
    
        #    location / {
        #        root   html;
        #        index  index.html index.htm;
        #    }
        #}
    
    }
    
    
    展开全文
  • NGINX配置文件详解

    2017-12-23 19:34:56
    nginx配置文件详解 #运行用户 user nobody; #启动进程,通常设置成cpu的数量相等 worker_process 1; #全局错误日志及PID文件 #error_log logs/error.log; #error_log logs/error.log notice; #error_...

    nginx配置文件详解
    #运行用户
    user nobody;
    #启动进程,通常设置成cpu的数量相等
    worker_process 1;

    #全局错误日志及PID文件
    #error_log  logs/error.log;
    #error_log  logs/error.log  notice;
    #error_log  logs/error.log  info;
     
    #pid        logs/nginx.pid

    #工作模式以及连接上限
    event{
        #epoll是多路复用IO(I/O Multiplexing)中的一种方式
        #紧用于linux2.6以上的内核,可以大大提高nginx的性能
        use epoll
       # 并发总数是 worker_processes 和 worker_connections 的乘积

        # 即 max_clients = worker_processes * worker_connections
        # 在设置了反向代理的情况下,max_clients = worker_processes * worker_connections / 4  为什么
        # 为什么上面反向代理要除以4,应该说是一个经验值
        # 根据以上条件,正常情况下的Nginx Server可以应付的最大连接数为:4 * 8000 = 32000
        # worker_connections 值的设置跟物理内存大小有关
        # 因为并发受IO约束,max_clients的值须小于系统可以打开的最大文件数
        # 而系统可以打开的最大文件数和内存大小成正比,一般1GB内存的机器上可以打开的文件数大约是10万左右
        # 我们来看看360M内存的VPS可以打开的文件句柄数是多少:
        # $ cat /proc/sys/fs/file-max
        # 输出 34336
        # 32000 < 34336,即并发连接总数小于系统可以打开的文件句柄总数,这样就在操作系统可以承受的范围之内
        # 所以,worker_connections 的值需根据 worker_processes 进程数目和系统可以打开的最大文件总数进行适当地进行设置
        # 使得并发总数小于操作系统可以打开的最大文件数目
        # 其实质也就是根据主机的物理CPU和内存进行配置
        # 当然,理论上的并发总数可能会和实际有所偏差,因为主机还有其他的工作进程需要消耗系统资源。
        # ulimit -SHn 65535


    }

    http {
        #设定mime类型,类型由mime.type文件定义
        include    mime.types;
        default_type  application/octet-stream;
        #设定日志格式
        log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                          '$status $body_bytes_sent "$http_referer" '
                          '"$http_user_agent" "$http_x_forwarded_for"';
     
        access_log  logs/access.log  main;
     
        #sendfile 指令指定 nginx 是否调用 sendfile 函数(zero copy 方式)来输出文件,
        #对于普通应用,必须设为 on,
        #如果用来进行下载等应用磁盘IO重负载应用,可设置为 off,
        #以平衡磁盘与网络I/O处理速度,降低系统的uptime.
        sendfile     on;
        #tcp_nopush     on;
     
        #连接超时时间
        #keepalive_timeout  0;
        keepalive_timeout  65;
        tcp_nodelay     on;
     
        #开启gzip压缩
        gzip  on;
        gzip_disable "MSIE [1-6].";
     
        #设定请求缓冲
        client_header_buffer_size    128k;
        large_client_header_buffers  4 128k;
     
     
        #设定虚拟主机配置
        server {
            #侦听80端口
            listen    80;
            #定义使用 www.gl.cn访问
            server_name  www.gl.cn;
     
            #定义服务器的默认网站根目录位置
            root html;
     
            #设定本虚拟主机的访问日志
            access_log  logs/nginx.access.log  main;
     
            #默认请求
            location / {
                
                #定义首页索引文件的名称
                index index.php index.html index.htm;  
     
            }
     
            # 定义错误提示页面
            error_page   500 502 503 504 /50x.html;
            location = /50x.html {
            }
     
            #静态文件,nginx自己处理
            location ~ ^/(images|javascript|js|css|flash|media|static)/ {
                
                #过期30天,静态文件不怎么更新,过期可以设大一点,
                #如果频繁更新,则可以设置得小一点。
                expires 30d;
            }
     
      
            #禁止访问 .htxxx 文件
                location ~ /.ht {
                deny all;
            }
     
        }
    }

     

    展开全文

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 3,573
精华内容 1,429
关键字:

nginx配置文件详解