NGINX 配置文件详解

# 也许没有列出所有配置的nginx配置文件demo
# 本demo中的基础配置示例多为默认配置
#
#
#

# 是否以守护进程运行
daemon	on;

# 是否以master/worker方式工作
master_process	on;

# Nginx worker进程个数
# master/worker运行模式下,worker的个数
# 其最优值取决于很多因素,一般会将其设定为CPU内核数量,或者设置为“auto”让其自动检测		
worker_processes  1;

# 日志的配置格式为:error_log	path/file  level;
# 日志按等级从小到大:debug、info、notice、warn、error、crit、alert、emerg
# 设定日志级别后,小于该等级的日志将不会输出
# 如果需要debug级别的日志,无论如何都需要确保在configure时已经加入了--with-debug参数,否则不会生效
# 关闭日志的方法是:error_log	/dev/null;
error_log  logs/error.log;
error_log  logs/error.log  notice;
error_log  logs/error.log  info;

# 用于限制core dumps文件的大小
# linux系统中,当进程被意外终止时会将内存写入核心映像(core文件)中
worker_rlimit_core	size;

# 指定coredump文件生成目录
# 要确保worker进程有权限向path中写入
working_directory	path;

# 绝对路径和相对路径都可
include  path/file;

# 保存master进程ID的文件存放路径
pid  logs/nginx.pid;

# Nginx worker进程运行的用户和用户组
# 指定master进程启动后,fork出的worker进程的用户和用户组
# 若在configure时,启用了--user=username和--group=groupname时,以参数为准
user nobody nobody;

# worker进程最大打开文件的数目
# 专业点的讲法:worker可以打开的最大文件句柄数
# 若没有设置该项,该值将被系统限制
# 这个值较低,会导致“too many open files”出现
worker_rlimit_nofile  1024;

# SSL硬件加速配置
# 可以通过openssl engine -t来查询本机是否拥有SSL硬件加速
ssl_engine  device;

# worker进程优先级
# 优先级范围:-20~+19,-20为最高,+19为最低,越高的进程将享受到越多的CPU时间
# 内核进程的优先级一般为-5,不建议低于这个值
worker_priority 0;

# 该模块中包含nginx中所有处理连接的设置
events {
	# 是否打开accept锁
	# 该锁可以让多个worker进程轮流地、序列化地榆新的客户建立TCP连接
	# 当某worker进程建立连接数达到7/8时,会大大地减小该进程建立连接的机会
	# 负载均衡
	accept_mutext  on

	# accept可能会用到的文件锁
	# 编译程序、操作系统等因素有可能导致nginx无法支持原子所,此时将会使用这个文件实现accept锁
	lock_file  logs/nginx.lock;

	# 使用accept锁后到真正建立连接之间的延迟时间
	# 由于accept锁不是个阻塞锁
	# 所以如果一个进程试图取得未果,将会立刻返回结果
	# 而该项配置的时间正是worker进程再次尝试取得锁的间隔时间
	accept_mutex_delay 500ms;

	# 批量建立新的连接
	# 当事件模型通知有新的连接时,尽可能地对本次调度中客户端发起的所有TCP请求都建立连接
	multi_accept  off;

	# 选择事件模型
	# 对linux来说,可供选择的模型有poll、select、epoll三种
	use[kqueue|rtsig|epoll|/dev/poll|select|poll|eventport];

	# 向默认IP地址输出debug级别日志
	debug_connection	192.168.0.1;

	# 每个worker进程可以处理的最大连接数
	# 系统的socket连接的限制约是64k
    worker_connections  1024;
}

# 所有http配置项都必须直属于http模块、server模块、location模块、upstream模块或if模块
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;

    # 
    upstream upstream_name{
    	server xxxxx weight=1;
    	server xxxxx weight=2;
    	....
    }

    # 每个server块就是一个虚拟主机,它只处理与之相对应的主机域名请求
    server {
    	# 监听端口
    	# listen  127.0.0.1:8080;
    	# listen  127.0.0.1;(不加监听端口默认监听80端口)
    	# listen  ip/port/ip&port param1 param2....
    	# 常见参数:
    	# default:将所在的server块作为整个Web服务的默认server块,如果没有设置默认,nginx将以第一个server块为默认
    	# default_server:同上
    	# backlog=-1:表示TCP中backlog队列的大小,默认-1表示不予设置
    	# rcvbuf=size:监听句柄的SO_RCVBUF参数
    	# sndbuf=size:监听句柄的SO_SNDBUF参数
    	# accept_filter:设置accept过滤器,支队FreeBSD系统有用
    	# deferred:
    	# bind:绑定当前端口/地址对,只有同时对一个端口监听多个地址时才会生效
    	# ssl:在当前监听的端口上建立的连接必须基于SSL协议
        listen       80;

        # 主机名称
        # 可以配置多个服务名,用空格分隔
        server_name  localhost;

        # 为提高快速寻找相应server_name的能力,nginx使用散列表来存储server name。
        # 该设置用来规定散列桶的大小
        server_names_hash_max_size 32|64|128;

        #charset koi8-r;

        #access_log  logs/host.access.log  main;

        # 该块会尝试根据用户请求中的URI来匹配其后的一段表达式
        # 如果可以匹配到,就会选择这个location块中的配置进行处理
        # =/:完全匹配/
        # ~:表示大小写敏感
        # ~*:大小写不敏感
        # ^~:uri的前部分能匹配即可
        # @:nginx服务内部请求之间的重定向,此类不参与直接处理用户请求
        # /:以上的匹配逻辑皆为“如果匹配……则”,若需要“如果不匹配……则”,就只好用/表达匹配不到的运行逻辑
        # 可以使用正则
        location [uri表达式] {
        	# 用root方式定义资源路径
        	# 会将URI请求完整地映射到资源路径
        	# 也就是说得到的最终资源路径是:root指定路径(绝对路径)+uri
        	# 默认会指定到nginx安装目录的html文件夹
            root  html;

            # 用alias方式定义资源路径
            # 会将URI与资源路径绑定
            # alias后可以跟正则表达式
            alias  some_route;

            # 首页配置
            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  ali as  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;
    #    }
    #}
}
posted @ 2021-01-05 22:26  码出天地  阅读(136)  评论(0编辑  收藏  举报