前言
在我们的日常工作中,或许仅仅是编辑后端代码,完成自己的工作内容,可能用不到nginx。Nginx一般适用于部署项目。当然,我们也可以不使用他,通过对外开启不同的端口,问题也可以解决。Nginx也是一个容器,可以运行网页,而且可以反向代理。比如,配置多个服务,跨域请求等操作。但是,如果我们追求完美,不想使用其他的端口(如果是我们的程序后台直接调用我们的服务器接口,默认端口为80)。这个时候就应该使用nginx这个工具了,使用他可以实现在一个服务器上面部署多个网站的目标/任务。好,那么接下来,我们来看一下nginx 的配置。
正文
#$开头是变量 #定义Nginx运行的用户和用户组 user work work; #nginx进程数,建议设置为等于CPU总核心数 worker_processes auto; #指当一个nginx进程打开的最多文件描述符数目 worker_rlimit_nofile 204800; #全局错误日志定义类型,[ debug | info | notice | warn | error | crit ] error_log /opt/log/nginx/error.log error; #工作模式及连接数上限 events { #参考事件模型,use [ kqueue | rtsig | epoll | /dev/poll | select | poll ]; #epoll模型是Linux 2.6以上版本内核中的高性能网络I/O模型,如果跑在FreeBSD上面,就用kqueue模型 use epoll; #单个后台worker process进程的最大并发链接数 worker_connections 102400; } #设定http服务器,利用它的反向代理功能提供负载均衡支持 http { #文件扩展名与文件类型映射表 include mime.types; #默认文件类型 default_type application/octet-stream; #默认编码 charset utf-8; #设定日志格式 #log_format main '$idXXXX\t$remote_addr\t$remote_user\t$time_local\t$http_host\t$request\t' # '$status\t$body_bytes_sent\t$http_referer\t' # '$http_user_agent\t$http_x_forwarded_for\t$request_time\t$upstream_response_time\t$userid'; log_format main "$cookie_idXXXX\t$remote_addr\t$remote_user\t[$time_local]\t$request_method\t$host\t$request_uri\t" "$request_time\t$status\t$body_bytes_sent\t'$http_referer'\t" "'$http_user_agent'\t'$http_x_forwarded_for'\t$upstream_addr\t$upstream_response_time\t$upstream_status\t"; #不可见字符分隔日志格式 #include other_log_format.conf; #实时日志收集json格式日志 #include json_log_format.conf; #日志流格式 log_format stream_log "$cookie_idXXXX\t$remote_addr\t$remote_user\t[$time_local]\t$request_method\t$host\t$request_uri\t" "$request_time\t$status\t$body_bytes_sent\t'$http_referer'\t" "'$http_user_agent'\t'$http_x_forwarded_for'\t$upstream_addr\t$upstream_response_time\t3"; #成功日志 access_log /opt/log/nginx/access.log main; #access_log syslog:local6:notice:log1.op.XXXXdns.org:514:nginx-main-log main; #指定 nginx 是否调用 sendfile 函数(zero copy 方式)来输出文件,对于普通应用, #必须设为 on,如果用来进行下载等应用磁盘IO重负载应用,可设置为 off,以平衡磁盘与网络I/O处理速度,降低系统的uptime. sendfile on; #长连接超时时间,单位是秒 keepalive_timeout 60; #服务器名称哈希表的最大值(默认512)[hash%size] server_names_hash_max_size 1024; #服务器名字的hash表大小 server_names_hash_bucket_size 256; #客户请求头缓冲大小 client_header_buffer_size 4k; #如果header过大,它会使用large_client_header_buffers来读取 large_client_header_buffers 4 256k; client_header_timeout 1m; client_body_timeout 1m; send_timeout 1m; #防止网络阻塞 tcp_nopush on; tcp_nodelay on; #允许客户端请求的最大单文件字节数 client_max_body_size 50m; #缓冲区代理缓冲用户端请求的最大字节数 client_body_buffer_size 50m; #nginx跟后端服务器连接超时时间(代理连接超时) proxy_connect_timeout 5; #后端服务器数据回传时间(代理发送超时) proxy_send_timeout 15; #连接成功后,后端服务器响应时间(代理接收超时) proxy_read_timeout 15; #设置代理服务器(nginx)保存用户头信息的缓冲区大小 proxy_buffer_size 4k; #proxy_buffers缓冲区,网页平均在32k以下的话,这样设置 proxy_buffers 8 32k; #高负荷下缓冲大小(proxy_buffers*2) proxy_busy_buffers_size 64k; #设定缓存文件夹大小,大于这个值,将从upstream服务器传 proxy_temp_file_write_size 64k; proxy_intercept_errors on; #客户端放弃请求,nginx也放弃对后端的请求 #proxy_ignore_client_abort on; #代理缓存头信息最大长度[设置头部哈希表的最大值,不能小于你后端服务器设置的头部总数] proxy_headers_hash_max_size 512; #设置头部哈希表大小(默认64)[这将限制头部字段名称的长度大小,如果你使用超过64个字符的头部名可以加大这个值。] proxy_headers_hash_bucket_size 256; #变量哈希表的最大值(默认值) variables_hash_max_size 512; #为变量哈希表制定关键字栏的大小(默认64) variables_hash_bucket_size 128; #开启gzip压缩输出 gzip on; #最小压缩文件大小 gzip_min_length 1k; #压缩缓冲区 gzip_buffers 4 16k; #压缩等级 gzip_comp_level 9; #压缩版本(默认1.1,前端如果是squid2.5请使用1.0) gzip_http_version 1.0; #压缩类型,默认就已经包含textml gzip_types text/plain application/x-javascript application/json application/javascript text/css application/xml text/javascript image/gif image/png; gzip_vary on; #map模块使用 map_hash_max_size 102400; map_hash_bucket_size 256; #Tengine Config #concat on; #trim on; #trim_css off; #trim_js off; server_tokens off; #footer "<!— $remote_addr $server_addr $upstream_addr —>"; #rewrite_log on; fastcgi_intercept_errors on; #include other config file include ../conf.d/.conf; #包含一些特殊站点的配置文件,此目录下文件暂时不包含在git自动管理过程中 include ../special/.conf; #屏蔽不加主机域名的默认请求 #server { # listen *:80 default; # servername ""; # return 444; #} #Nginx状态监测模块配置 req_status_zone server "$server_name,$server_addr:$server_port" 10M; req_status server; server { listen 127.0.0.1:80; server_name 127.0.0.1; access_log /opt/log/nginx/nginx_status/status_access.log main; location /status { req_status_show; access_log /opt/log/nginx/nginx_status/status_access.log main; allow 127.0.0.1; deny all; } location /stub_status { stub_status on; access_log /opt/log/nginx/nginx_status_stub/status_stub_access.log main; allow 127.0.0.1; deny all; } location /check_status { check_status; access_log /opt/log/nginx/nginx_status_check/status_access_check.log main; allow 127.0.0.1; deny all; } } } 1、下面是可以用来判断的表达式: -f和!-f用来判断是否存在文件 -d和!-d用来判断是否存在目录 -e和!-e用来判断是否存在文件或目录 -x和!-x用来判断文件是否可执行 2、下面是可以用作判断的全局变量 $args #这个变量等于请求行中的参数。 $content_length #请求头中的Content-length字段。 $content_type #请求头中的Content-Type字段。 $document_root #当前请求在root指令中指定的值。 $host #请求主机头字段,否则为服务器名称。 $http_user_agent #客户端agent信息 $http_cookie #客户端cookie信息 $limit_rate #这个变量可以限制连接速率。 $request_body_file #客户端请求主体信息的临时文件名。 $request_method #客户端请求的动作,通常为GET或POST。 $remote_addr #客户端的IP地址。 $remote_port #客户端的端口。 $remote_user #已经经过Auth Basic Module验证的用户名。 $request_filename #当前请求的文件路径,由root或alias指令与URI请求生成。 $query_string #与$args相同。 $scheme #HTTP方法(如http,https)。 $server_protocol #请求使用的协议,通常是HTTP/1.0或HTTP/1.1。 $server_addr #服务器地址,在完成一次系统调用后可以确定这个值。 $server_name #服务器名称。 $server_port #请求到达服务器的端口号。 $request_uri #包含请求参数的原始URI,不包含主机名,如:”/foo/bar.php?arg=baz”。 $uri #不带请求参数的当前URI,$uri不包含主机名,如”/foo/bar.html”。 $document_uri #与$uri相同。 例:http://localhost:88/test1/test2/test.php $host:localhost $server_port:88 $request_uri:http://localhost:88/test1/test2/test.php $document_uri:/test1/test2/test.php $document_root:D:\nginx/html $request_filename:D:\nginx/html/test1/test2/test.php