Linux下nginx服务的配置文件nginx.conf详细介绍

1、
#使用哪个用户启动nginx 前面是用户,后面是组
#user  nobody;

 

2、
#nginx工作的进程数量(即worker进程数的个数),一般设置为和cpu核数一样
worker_processes  auto;

 

3、
#[ debug | info | notice | warn | error | crit ]错误日志的位置
#error_log  logs/error.log;
#error_log  logs/error.log  notice;
#error_log  logs/error.log  info;

 

4、
#进程号(pid)保存文件
#pid        logs/nginx.pid;

 

5、
events
{
     worker_connections 51200;   #每个进程最大连接数(最大连接=连接数x进程数)
}

 

6、
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;   用了log_format指令设置了日志格式之后,需要用access_log指令指定日志文件的存放路径;

    #开启高效文件传输模式,sendfile指令指定nginx是否调用sendfile函数来输出文件,对于普通应用设为 on,如果用来进行下载等应用磁盘IO重负载应用,可设置为off,以平衡磁盘与网络I/O处理速度,降低系统的负载。注意:如果图片显示不正常把这个改成off。
    sendfile        on;
    #该参数在sendfile开启的状态下才能生效。激活tcp_nopush参数可以允许把httpresponse header和文件的开始放在一个文件里发布,积极的作用是减少网络报文段的数量。以防止网络阻塞
    #tcp_nopush     on;
    #该参数在sendfile开启的状态下才能生效。激活tcp_nodelay,内核会等待将更多的字节组成一个数据包,从而提高I/O性能。以防止网络阻塞
    #tcp_nodelay on;
    
    #连接超时时间,单位是秒。如果是65,则表示:如果65秒内没有操作则断开连接。
    #keepalive_timeout  0;
    keepalive_timeout  65;

    #gzip  on;   #开启gzip压缩功能




下面具体解释下日志文件格式:
$remote_addr与$http_x_forwarded_for用以记录客户端的ip地址;
$remote_user:用来记录客户端用户名称;
$time_local: 用来记录访问时间与时区;
$request: 用来记录请求的url与http协议;
$status: 用来记录请求状态;成功是200,
$body_bytes_sent :记录发送给客户端文件主体内容大小;
$http_referer:用来记录从那个页面链接访问过来的;
$http_user_agent:记录客户浏览器的相关信息;

通常web服务器放在反向代理的后面,这样就不能获取到客户的IP地址了,通过$remote_add拿到的IP地址是反向代理服务器的iP地址。
反向代理服务器在转发请求的http头信息中,可以增加x_forwarded_for信息,用以记录原有客户端的IP地址和原来客户端的请求的服务器地址。

 

7、  #下面开始虚拟主机的配置:
    server {
        listen       80;    #监听端口
        server_name  localhost;   #配置访问域名,域名可以有多个,用空格隔开

        #charset koi8-r;    #默认编码

        #access_log  logs/host.access.log  main;     #设定本虚拟主机的访问日志

        location / {   #该location模块表示:当访问http://localhost:80时访问/usr/local/nginx/html/index.html文件
            root   html;   #此处可以使用相对路径也可以使用绝对路径,相对路径是相对于/usr/local/nginx/下面为相对路径,而绝对路径是从/usr/...为绝对路径
            index  index.html index.htm;   #每当访问一个文件夹,先找index.html,找不到就找index.htm 找不到就不找了。不执行文件。 
        }

        #error_page  404              /404.html;   #404错误页面。把404.html放到html下

        # redirect server error pages to the static page /50x.html
        #
        error_page   500 502 503 504  /50x.html;   #500,502,503,5604错误页面。把50x.html放到html下
        location = /50x.html {
            root   html;   #此处可以使用相对路径也可以使用绝对路径,相对路径是相对于/usr/local/nginx/下面为相对路径,而绝对路径是从/usr/...为绝对路径
        }

        # proxy the PHP scripts to Apache listening on 127.0.0.1:80
        #
        #location ~ \.php$ {   #该location模块表示:当访问以.php结尾的页面时,比如http://localhost/index.php,则被代理到http://127.0.0.1/index.php
        #    proxy_pass   http://127.0.0.1;
        #}

        # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
        #
        #location ~ \.php$ {     #该localhost模块表示:当访问以.php结尾的页面时,请求调度到fcgi server
        #    root           html;   #此处可以使用相对路径也可以使用绝对路径,相对路径是相对于/usr/local/nginx/下面为相对路径,而绝对路径是从/usr/...为绝对路径
        #    fastcgi_pass   127.0.0.1:9000;   #抛给本机的9000端口
        #    fastcgi_index  index.php;     #设定动态首页
        #    fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;   #脚本文件请求的路径
        #    include        fastcgi_params;   #配置项目中:include fastcgi_params; fastcgi_params 文件中含有各个nginx常量的定义,默认情况 SCRIPT_FILENAME = $fastcgi_script_name
        #}

        # deny access to .htaccess files, if Apache's document root
        # concurs with nginx's one
        #
        #location ~ /\.ht {   #该location模块表示:禁止访问 .htxxx 文件
        #    deny  all;
        #}
    }

 

8、下面进行另外一个虚拟主机的配置:另一个虚拟主机使用混合的IP的配置
    # 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;   #此处可以使用相对路径也可以使用绝对路径,相对路径是相对于/usr/local/nginx/下面为相对路径,而绝对路径是从/usr/...为绝对路径
    #        index  index.html index.htm;   #每当访问一个文件夹,先找index.html,找不到就找index.htm 找不到就不找了。不执行文件。 
    #    }
    #}

 

9、下面进行https的配置
    # 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 / {   #该location模块表示:当访问http://localhost:80时访问/usr/local/nginx/html/index.html文件
    #        root   html;   #此处可以使用相对路径也可以使用绝对路径,相对路径是相对于/usr/local/nginx/下面为相对路径,而绝对路径是从/usr/...为绝对路径
    #        index  index.html index.htm;   #每当访问一个文件夹,先找index.html,找不到就找index.htm 找不到就不找了。不执行文件。 
    #    }
    #}

}

下面对https设置中的参数进行解释:

1、ssl_certificate证书其实是个公钥,它会被发送到连接服务器的每个客户端。

2、ssl_certificate_key私钥是用来解密的,所以它的权限要得到保护但nginx的主进程能够读取。

3、sl_session_cache shared:SSL:1m:设置ssl/tls会话缓存的类型和大小。

  • shared

          所有工作进程之间共享缓存。缓存大小以字节为单位指定;一兆字节可以存储大约4000个session。每个共享缓存都应该有一个任意名称。具有相同名称的缓存可以用于多个虚拟服务器。

  • off

        严禁使用session缓存:nginx明确告诉客户端session可能不会被重用。

  • none

        session缓存的使用被禁止:nginx告诉客户端session可能会被重用,但实际上并不会将session参数存储在缓存中。

  • builtin

        在OpenSSL中构建的缓存;仅由一个工作进程使用。缓存大小在session中指定。如果没有给出大小,则等于20480个会话。使用内置高速缓存可能导致内存碎片。

  • 注意: builtin和shared可以同时使用,但是Nginx官方说只使用shared缓存,而不使用built-in缓存的性能应该会更高。配置案例:

        ssl_session_cache builtin:1000 shared:SSL:10m;

4、ssl_session_timeout 5m: 客户端可以重用会话缓存中ssl参数的过期时间,内网系统默认5分钟太短了,可以设成30m即30分钟甚至4h

5、设置较长的keepalive_timeout也可以减少请求ssl会话协商的开销,但同时得考虑线程的并发数了

6、ssl_ciphers选择加密套件,不同的浏览器所支持的套件(和顺序)可能会不同。这里指定的是OpenSSL库能够识别的写法,你可以通过openssl -v cipher 'RC4:HIGH:!aNULL:!MD5'(后面是你所指定的套件加密算法) 来看所支持算法。

    加密套件 之间用冒号分隔,加密套件 前有感叹号的表示必须废弃。

7、ssl_prefer_server_ciphers on设置协商加密算法时,优先使用我们服务端的加密套件,而不是客户端浏览器的加密套件。

你可能感兴趣的:(Linux下nginx服务的配置文件nginx.conf详细介绍)