nginx config 详解
nginx config 的整体布局如下...#全局块events {#events块...}http#http块{...#http全局块server#server块{...#server全局块location [PATTERN]#location块{...}
·
nginx config 的整体布局如下
... #全局块
events { #events块
...
}
http #http块
{
... #http全局块
server #server块
{
... #server全局块
location [PATTERN] #location块
{
...
}
location [PATTERN]
{
...
}
}
server
{
...
}
... #http全局块
}
nginx config 配置例子
#配置用户或者组,默认为nobody nobody。
user nginx;
#允许生成的进程数,默认为1
worker_processes auto;
#制定日志路径,级别。这个设置可以放入全局块,http块,server块,级别以此为:debug|info|notice|warn|error|crit|alert|emerg
error_log /var/log/nginx/error.log notice;
#指定nginx进程运行文件存放地址
pid /var/run/nginx.pid;
events {
accept_mutex on; #设置网路连接序列化,防止惊群现象发生,默认为on
multi_accept on; #设置一个进程是否同时接受多个网络连接,默认为off
#use epoll; #事件驱动模型,select|poll|kqueue|epoll|resig|/dev/poll|eventport
#最大连接数,默认为512
worker_connections 1024;
}
http {
#文件扩展名与文件类型映射表
include /etc/nginx/mime.types;
#默认文件类型,默认为text/plain
default_type application/octet-stream;
#给文件格式命名为main
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
# 配置nginx 日志地址,并设置文件格式为mian
access_log /var/log/nginx/access.log main;
#允许sendfile方式传输文件,默认为off,可以在http块,server块,location块。
sendfile on;
#tcp_nopush on;
#连接超时时间,默认为75s,可以在http,server,location块。
keepalive_timeout 65;
#请求头带"_" 不会去除掉
underscores_in_headers on;
#接收客户端header超时, 默认60s, 如果60s内没有收到完整的http包头, 返回408
client_header_timeout 60s;
#接收客户端body超时, 默认60s, 如果连续的60s内没有收到客户端的1个字节, 返回408
client_body_timeout 60s;
#nginx与upstream server的连接超时时间
proxy_connect_timeout 60s;
#nginx发送数据至upstream server超时, 默认60s, 如果连续的60s内没有发送1个字节, 连接关闭
proxy_send_timeout 60s;
#发送数据至客户端超时, 默认60s, 如果连续的60s内客户端没有收到1个字节, 连接关闭
send_timeout 60s;
proxy_max_temp_file_size 0;
proxy_request_buffering off;
# gzip 压缩级别 1-10
gzip on;
# 启用gzip压缩的最小文件;小于设置值的文件将不会被压缩
gzip_min_length 1k;
#识别http的协议版本(1.0/1.1)
gzip_http_version 1.1;
#设置系统获取几个单位的缓存用于存储gzip的压缩结果数据流。4 16k代表以16k为单位,安装原始数据大小以16k为单位的4倍申请内存。
gzip_buffers 4 16k;
# 进行压缩的文件类型。
gzip_types text/plain application/javascript application/x-javascript text/css application/xml text/javascript application/x-httpd-php image/jpeg image/gif image/png;
# gzip 压缩级别 1-10,越高压缩比越大,越消耗cpu
gzip_comp_level 3;
#和http头有关系,加个vary头,给代理服务器用的,有的浏览器支持压缩,有的不支持,所以避免浪费不支持的也压缩,所以根据客户端的HTTP头来判断,是否需要压缩
gzip_vary on;
#IE6对Gzip不怎么友好,不给它Gzip了
gzip_disable "MSIE [1-6]\."
#拒绝的ip(考虑通过include 引入文件方式引入)
deny 127.0.0.2;
deny 127.0.0.3;
# upstream负载均衡算法
# 轮询算法(默认算法):每个请求依次会分配给后端不同的应用程序服务器,不理会后端服务器的时机压力
# IP_HASH:当IP进行重复访问时会被指定到上次访问的服务器,可以解决动态网站session共享问题
upstream wp_ip_hash{
ip_hash;
server 10.158.1.10:8901;
server 10.158.1.20:8901;
server 10.158.1.30:8901;
}
#基于URL的HASH 当 当客户端多次访问同一个地址时分配到固定的节点
upstream wp_url_hash{
hash $request_uri consistent;
server 10.158.1.10:8901;
server 10.158.1.20:8901;
server 10.158.1.30:8901;
}
#最少连接数轮询:哪个节点当前的连接数少就分配给哪个节点处理
upstream wp_lease_conn{
least_conn;
server 10.158.1.10:8901;
server 10.158.1.20:8901;
}
#该作用主要是根据客户端请求中$http_upgrade 的值,来构造改变$connection_upgrade的值,即根据变量$http_upgrade的值创建新的变量$connection_upgrade,
#如果 $http_upgrade 不为 '' (空),则 $connection_upgrade 为 upgrade,如果 $http_upgrade 为 '' (空),则 $connection_upgrade 为 close
#websocket
map $http_upgrade $connection_upgrade {
default upgrade;
'' close;
}
server {
# 表示 nginx 监听的端口
listen 80;
#如果为/ 重写路径到/test1
location / {
rewrite / /test1;
}
location /test1 {
#表示传递时请求头不变, $host是nginx内置变量,表示的是当前的请求头,proxy_set_header表示设置请求头
proxy_set_header Host $host;
# 表示传递时来源的ip还是现在的客户端的ip
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
# 表示反向代理发送的HTTP协议的版本是1.1,HTTP1.1支持长连接(websocket)
proxy_http_version 1.1;
# 表示设置Upgrade不变(websocket)
proxy_set_header Upgrade $http_upgrade;
#表示如果 $http_upgrade为upgrade,则请求为upgrade(websocket),如果不是,就关闭连接
proxy_set_header Connection "upgrade";
#表示代理转发到 upstream wp_ip_hash
proxy_pass http://wp_lease_conn;
}
#表示监听 /test/websocket/
location ^~/ws/websocket/{
#表示代理转发到 upstream wp_ip_hash
proxy_pass http://wp_ip_hash;
#表示传递时请求头不变, $host是nginx内置变量,表示的是当前的请求头,proxy_set_header表示设置请求头
proxy_set_header Host $host;
# 表示传递时来源的ip还是现在的客户端的ip
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
# 表示反向代理发送的HTTP协议的版本是1.1,HTTP1.1支持长连接(websocket)
proxy_http_version 1.1;
# 表示设置Upgrade不变(websocket)
proxy_set_header Upgrade $http_upgrade;
#表示如果 $http_upgrade为upgrade,则请求为upgrade(websocket),如果不是,就关闭连接
proxy_set_header Connection "upgrade";
}
}
#ssl 配置
#include ssl.config
}
当配置需要添加ssl 支持https/wss 配置如下
#支持https/wss 配置
server{
#监听443端口
listen 443;
ssl on;
#申请域名对应的证书
ssl_certificate /etc/ssl/yin.com_bundle.crt;
#申请域名对应的密匙
ssl_certificate_key /etc/ssl/yin.com.key;
ssl_session_timeout 5m;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;
ssl_prefer_server_ciphers on;
location /test1 {
#表示传递时请求头不变, $host是nginx内置变量,表示的是当前的请求头,proxy_set_header表示设置请求头
proxy_set_header Host $host;
# 表示传递时来源的ip还是现在的客户端的ip
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
# 表示反向代理发送的HTTP协议的版本是1.1,HTTP1.1支持长连接(websocket)
proxy_http_version 1.1;
# 表示设置Upgrade不变(websocket)
proxy_set_header Upgrade $http_upgrade;
#表示如果 $http_upgrade为upgrade,则请求为upgrade(websocket),如果不是,就关闭连接
proxy_set_header Connection "upgrade";
#表示代理转发到 upstream wp_ip_hash
proxy_pass http://wp_lease_conn;
}
}
#server{
# listen 80;
# rewrite ^/(.*)$ https://yin.com:443/$1 permanent;
#}
上面是nginx的基本配置,需要注意的有以下几点:
1、配置完成之后通过 nginx -t 对nginx 配置文件进行检查
2、配置检查完毕之后 nginx -c nginx.conf -s reload 进行重新加载
3、惊群现象:一个网路连接到来,多个睡眠的进程被同事叫醒,但只有一个进程能获得链接,这样会影响系统性能。
4、每个指令必须有分号结束。
5、location 配置的语法
语法规则: location [=|~|~*|^~] /uri/ { … }
= 开头表示精确匹配
^~ 开头表示uri以某个常规字符串开头,理解为匹配 url路径即可。nginx不对url做编码,因此请求为/static/20%/aa,可以被规则^~ /static/ /aa匹配到(注意是空格)。
~ 开头表示区分大小写的正则匹配
~* 开头表示不区分大小写的正则匹配
!~和!~*分别为区分大小写不匹配及不区分大小写不匹配 的正则
/ 通用匹配,任何请求都会匹配到。
多个location配置的情况下匹配顺序为
首先匹配 =,其次匹配^~, 其次是按文件中顺序的正则匹配,最后是交给 / 通用匹配。当有匹配成功时候,停止匹配,按当前匹配规则处理请求
更多推荐
已为社区贡献6条内容
所有评论(0)