Nginx教程

nginx配置文件的解读

本文主要是介绍nginx配置文件的解读,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

nginx配置文件的解读

1、nginx配置文件的路径
/usr/local/nginx/conf/nginx.conf
2、nginx配置文件的结构:
    ... ...
    events {
                 ... ...
    }

    http {
                 ... ...
           server {
                 ... ...
                 location / {
                        root html;
                        ... ...
                  }
           }
    }


nginx的配置指令可以分为两大类:指令块与单个指令。
指令块就像 events, http, server等。
单独指令就是像root, html 这样的。
nginx规定指令块可以嵌套,如http块中可以嵌套server指令,server块中可以嵌套location指令,
指令可以同时出现在不同的指令块,如root指令可以同时出现在http、server、location指令块,
需要注意的是在location中定义的指令会覆盖server,httd的指令。

3、解析配置文件

全局配置
[root@anonymous html]# cat   /usr/local/nginx/conf/nginx.conf

#user  nobody;    //指定nginx的工作进程的用户及用户组,默认是nobody用户。
worker_processes  1;    //指定工作进程的个数,默认是1个。具体可以根据服务器CPU数量
                                                   进行设置,比如CPU有4个,可以设置为4。如果不知道CPU的数量,
                                                   可以设置为auto。nginx 会自动判断服务器的CPU个数,并设置相应
                                                   //  的进程数。

#error_log  logs/error.log;        //设置nginx的错误日志路径,并设置相应的输出级别。
#error_log  logs/error.log  notice;    //如果编译时没有指定编译调试模块,那么 info就是最详细的 #error_log  logs/error.log  info;       输出模式了。如果有编译debug模块,那么debug是最为                          详细的输出模式。这里设置为默认就好了


#pid        logs/nginx.pid;        //指定nginx进程pid的文件路径。


events {                //这个指令块用来设置工作进程的工作模式以及每个进程的连                    接上限。
    use epoll;            //用来指定nginx的工作模式,通常选择epoll,除了epoll,                       还有select,poll。
    worker_connections  1024;        //定义每个工作进程的最大连接数,默认是1024。
}


http {
    include       mime.types;    //定义数据类型
    default_type  application/octet-stream;    //设定默认类型为二进制流,也就是当文件类型未                        定义时使用这种方式,
                    //例如在没有配置PHP环境时,Nginx是不予解析                    的,此时,用浏览器访问PHP文件就会出现下载窗                    口。
        
    #log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
    #                  '$status $body_bytes_sent "$http_referer" '
    #                  '"$http_user_agent" "$http_x_forwarded_for"';

    #log_format    //定义日志文件格式,并默认取名为main,可以自定义该名字。
        也可以通过添加,删除变量来自定义日志文件的格式。

    #access_log  logs/access.log  main;
    #access_log    //定义访问日志的存放路径,并且通过引用log_format所定义的main名称设置其输        出格式。



    sendfile        on;    //用于开启高效文件传输模式。直接将数据包封装在内核缓冲区,然后返给客户,        
    #tcp_nopush     on;    //将tcp_nopush和tcp_nodelay两个指令设置为on用于防止网络阻塞;

    #keepalive_timeout  0;    //设置客户端连接保持活动的超时时间。在超过这个时间之后,服务器会
            关闭该连接。
    keepalive_requests  10;    ////设置nginx在保持连接状态最多能处理的请求数,到达请求数,即使还            在保持连接状态时间内,也需要重新连接

    #gzip  on;            //开启压缩功能,减少文件传输大小,节省带宽。
    #gzip_min_length 1k;         //最小文件压缩,1k起压。
    #gzip_types   text/plain text/xml;     //压缩文件类型
    #gzip_comp_level  3;         //压缩级别,默认是1。



    server {                //用来定义虚拟主机。
        listen       80;            //设置监听端口,默认为80端口
        server_name  localhost;        //域名,多个域名通过逗号隔开

        #charset koi8-r;        //设置网页的默认编码格式,解决中文字体乱码

        #access_log  logs/host.access.log  main;    //指定该虚拟主机的独立访问日志,会覆盖前面的                    全局配置。
        index index.html index.htm;        //设置默认的索引文件
        location / {                //用来定义请求匹配规则。
            root   html;                //发布资源存放的目录
            index  index.html index.htm;        //主页文件
            allow 192.168.4.254;            //访问控制规则
            deny all;
            auth_basic  "abc";                //定义用户认证
            auth_basic_user_file "/usr/local/nginx/conf/pass";
          }

        #error_page  404              /404.html;        //定义访问错误返回的页面,凡是状态码是500                     502 503 504 都会返回这个页面。

        # 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$ {        //凡是以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    on;            //开启SSL
    #    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;
    #    }
    #}

}

location ~ \.php$   :凡是以php结尾文件,都会匹配到这条规则。
root    :php文件存放的目录
fastcgi_pass    :指定php-fpm进程管理的ip端口或者unix套接字
fastcgi_index  :指定php脚本目录下的索引文件
fastcgi_param    :指定传递给FastCGI服务器的参数
location ~ /\.ht    :凡是请求类似.ht资源,都拒绝。

ps:进程的最大连接数受Linux系统进程的最大打开文件数限制。
比如ulimit -n 默认时1024,如果不改变这个值,
即使修改工作进程为2048,也无法处理这么多连接。
          
修改文件描述符方式:
临时生效: ulimit -n  65535
    
在压测的时候,如果遇到报错 apr_socket_recv: Connection reset by peer (104):
解决办法:
# 临时解决:
加一个-r参数,避免因为套接字错误退出,但是影响测试结果。
# 根本解决:
# vim /etc/sysctl.conf
net.ipv4.tcp_syncookies = 0
然后执行:sysctl -p

这篇关于nginx配置文件的解读的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!