nginx相关配置
nginx内置变量
- $arg_PARAMETER
客户端GET请求中PARAMETER字段的值。 - $args客户端
请求中的参数 - $binary_remote_addr
远程地址的二进制表示 - $body_bytes_sent
已发送消息体字节数 - $content_length
HTTP请求信息里的Content-Length字段 - $cookie_COOKIE
客户端请求中COOKIE头域的值 - $document_root
针对当前请求的根路径设置值 - == d o c u m e n t u r i = = 与 ‘ ‘ ‘ document_uri== 与``` documenturi==与‘‘‘uri```相同
- $host
请求信息中的Host头域值,如果请求中没有Host行,则等于设置的服务器名 - $http_HEADER
HTTP请求中HEADER字段 - == h t t p h o s t = = 与 ‘ ‘ ‘ http_host== 与``` httphost==与‘‘‘host```相同,如果请求信息中没Host行,则可能不同。
- http_referer
引用地址 - $http_user_agent
客户端代理信息 - $http_via
最后一个访问服务器的IP地址 - $http_x_forwarded_for
相当于网络访问路径 - == i s a r g s = = 如 果 ‘ ‘ ‘ is_args== 如果``` isargs==如果‘‘‘args```有值,则相当于“?”否在为空
- $limit_rate
对连接速率的限制 - $nginx_version
当前Nginx服务器版本 - $pid
当前服务器主进程的进程ID - query_string
与$args
相同 - remote_addr
客户端IP地址 - remote_port
客户端端口号 - remote_user
客户端用户名,用于Auth Basic Module验证 - request
客户端请求 - request_body
客户端请求的报文体 - request_body_file
发往后端服务器本地临时缓存文件的名称 - request_filename
当前请求的文件路径名,由root或alias指令与URI请求生成 - request_method
请求方法比如:GET和POST - request_uri
请求的URI,带参数,不包含主机名 - scheme
所用的协议,如http或者https,
如:rewrite^(.+)$$scheme://mysite.name$1redirect
- $server_addr
服务器地址,如果没有用Listen指明服务器地址,使用这个变量将发起一次系统调用以取得地址(会造成资源浪费). - $server_name
请求到达的服务器名。 - $server_port
请求到达的服务器端口号 - $server_protocol
请求的协议版本,HTTP/1.0或HTTP/1.1 - $uri
请求的不带请求参数的URI,可能和最初的值有不同,比如经过重定向之类的。
nginx执行命令
./nginx -t
:检测nginx.conf配置文件语法是否正确。
-p
:用来改变nginx的安装路径。
/usr/local/nginx/sbin/nginx -s reload
:更新nginx配置
./sbin/Nginx
:直接启动
./sbin/Nginx -g TERM | INT | QUIT
:TERM/INT用于快速停止。QUIT用于平缓停止。
或者
kill TERM | INT | QUIT `/Nginx/logs/nginx.pid
kill -9 | SIGKILL `Nginx/logs/nginx.pid`
./sbin/nginx -g HUP [-c newconfile]
:HUP用于平缓重启,-c用于指定新的配置文件
或:
kill HUP `/Nginx/logs/nginx.pid`
- nginx升级
./Nginx/nginx -p 【newInstallPath】
./sbin/Nginx -g USR2或
kill USR2 `/Nginx/logs/nginx.pid`
ps -ef | grep nginx查看服务是否正常
./sbin/Nginx -g WINCH 平缓停止旧服务
kill WINCH `/Nginx/logs/nginx.pidyy`
配置文件说明。
nginx的配置文件,包括以下几部分:全局块
,events
,http
,server
,location
:
- 全局块:用于定义影响Nginx服务器整体运行的配置指令。
- 如:运行用户组,允许生成的worker process数、Nginx
配置文件参数详细说明
#user nobody;
user nginx nginx;
worker_processes 2;
pid logs/nginx.pid;
#work进程打开的最大文件数
worker_rlimit_nofile 100000;
events {
#单进程允许的客户端最大连接数,ulimit -n查看最大文件句柄数
worker_connections 2048;
#打开同时接受多个新网络连接请求的功能
multi_accept on;
#优化同一时刻只有一个请求而避免多个睡眠进程被唤醒的设置,on为防止被同时唤醒,默认为off
accept_mutex on;
#事件驱动模型
use epoll;
}
http {
#隐藏nginx版本号
server_tokens off;
#当nginx做为静态资源服务器时,sendfile接口可提高性能,反向代理则不起作用
sendfile on;
#在 nginx 中,tcp_nopush 配置和 tcp_nodelay "互斥"。它可以配置一次发送数据的包大小,与 sendfile搭配使用
tcp_nopush on;
#复用连接,指定每个TCP 连接最多可以保持多长时间。与tcp_nodelay 配合使用,关闭会导致nodelay失效
keepalive_timeout 10;
#交互性的以及客户/服务器型的应用程序将极大地受益,禁用了Nagle算法.(不需要等待0.2s)使数据立即发出
#开启或关闭nginx使用TCP_NODELAY选项的功能。 这个选项仅在将连接转变为长连接的时候才被启用。(译者注,在upstream发送响应到客户端时也会启用)。
tcp_nodelay on;
#可通过keep-alive连接的客户端请求数.下面的值仅是测试环境使用,具体设置请根据实际机器来调
keepalive_requests 100000;
#指定客户端与服务端建立连接后发送 request body 的超时时间。如果客户端在指定时间内没有发送任何内容,Nginx 返回 HTTP 408(Request Timed Out)
client_body_timeout 100;
#客户端向服务端发送一个完整的 request header 的超时时间。如果客户端在指定时间内没有发送一个完整的request header,Nginx 返回 HTTP 408(Request Timed Out)
client_header_timeout 100;
#服务端向客户端传输数据的超时时间。
send_timeout 100;
#在客户端停止响应之后,允许服务器关闭连接,释放socket关联的内存
reset_timedout_connection on;
#指令描述会话状态存储区域。会话的数目按照指定的变量来决定,它依赖于使用的变量大小和memory_max_size的值。默认no
limit_conn_zone $binary_remote_addr zone=addr:5m;
#指定一个会话的最大同时连接数,超过这个数字的请求将被返回”Service unavailable” (503)代码。默认为no
limit_conn addr 100;
#对每个连接限速400k. 注意,这里是对连接限速,而不是对IP限速。如果一个IP允许两个并发连接,那么这个IP就是限速limit_rate×2。
limit_rate 400k;
#指定当连接数超过设定的最大连接数,服务器限制连接时的日志等级,默认值为error
limit_conn_log_level error;
#多域名,服务器名字的hash表大小,表示 server name 的字符串长度上限值
server_names_hash_bucket_size 128;
#表示支持的 server name 总数
server_names_hash_max_size 512;
#报错日志生成地址和级别
error_log logs/error.log notice;
#error.log 中生成重写的 rewrite 日志
rewrite_log on;
#关闭全局access日志,server块中单独配置
access_log off;
#通过该文件识别资源媒体类型,HTML/GIF/XML/Flash等内容,MIME是网络资源的媒体类型,直接播放媒体资源
include mime.types;
#推荐配置在location块中,避免浏览器自动播放媒体文件,而不是供用户下载,MIME类型会被重置为application/octet-stream
default_type application/octet-stream;
charset UTF-8;
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
####cache#########################################
#缓存文件的最大数目为 100000, 超过此数字后 Nginx 将按照 LRU 原则丢弃冷数据
#inactive=20s 与 open_file_cache_min_uses 2 表示如果在 20s 内某文件被访问的次数低于 2 次,那就将它从缓存中删除。
open_file_cache max=100000 inactive=20s;
#表示每 30s 检查一次缓存中的文件元信息是否是最新的,如果不是则更新之
open_file_cache_valid 30s;
open_file_cache_min_uses 2;
#如果你的静态文件内容变化频繁并且对时效性要求较高,一般应该把 open_file_cache_valid 设置的小一些,以便及时检测和更新
#对静态文件访问的 error 和 access log 不关心的话,可以关闭已提升效率
#open_file_cache_errors文件错误是否也同样缓存
open_file_cache_errors on;
#
#
#access_log logs/access.log main;
#sendfile on;
#tcp_nopush on;
#keepalive_timeout 0;
#keepalive_timeout 65;
#gzip on;
##################
include exten/*.conf;
##################
新增模块操作
- 查看已编译的配置
/usr/local/nginx/sbin/nginx -V
nginx version: nginx/1.14.0
built by gcc 4.8.5 20150623 (Red Hat 4.8.5-28) (GCC)
built with OpenSSL 1.1.0g 2 Nov 2017
TLS SNI support enabled
configure arguments: --prefix=/usr/local/nginx --with-http_stub_status_module --with-http_gzip_static_module --with-http_ssl_module --with-openssl=/usr/local/src/openssl-1.1.0g --with-http_perl_module
- 重新编译,新增模块
#计划新增模块http_realip_module
wget http://nginx.org/download/nginx-1.14.0.tar.gz
tar xvf nginx-1.14.0.tar.gz
cd nginx-1.14.0
./configure --prefix=/usr/local/nginx --with-http_stub_status_module --with-http_gzip_static_module --with-http_ssl_module --with-openssl=/usr/local/src/openssl-1.1.0g --with-http_perl_module --with-http_realip_module
make
cp /usr/local/nginx/sbin/nginx /usr/local/nginx/sbin/nginx.bak
cp ./objs/nginx /usr/local/nginx/sbin/
/usr/local/nginx/sbin/nginx -s stop
/usr/local/nginx/sbin/nginx
- 加入配置,以sentry为例
...
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Request-Id $request_id;
proxy_set_header X-Forwarded-For $remote_addr;
proxy_set_header X-Scheme $scheme;
...
nginx -s reload加载