文件读取
sendfile
Syntax:sendfile on|off
Default:sendfile off
Context:http,server,location,if in location
tcp_nopush
Syntax:tcp_nopush on|off
Default:tcp_nopush off
Context:http,server,location
作用:sendfile开启的情况下,提高网络包的传输效率
tcp_nodelay
Syntax:tcp_nodelay on|off
Default:tcp_nodelay off
Context:http,server,location
作用:keepalive连接下,提高网络包的传输实时性
压缩(Gzip)
如果我们租用了一个带宽很低的服务器,网站访问速度会很慢,这时我们可以通过让nginx开启GZIP压缩来提高网站的访问速度
Syntax:gzip on|off
Default:gzip off
Context:http,server,location,if in location
作用:压缩传输
压缩比
Syntax:gzip_comp_level level;
Default:gzip_comp_level 1;
Context:http,server,location
http协议版本
Syntax:gzip_http_version 1.0|1.1;
Default:gzip_http_version 1.1;
Context:http,server,location
配置文件如下
server { listen 8060; server_name localhost; sendfile on; #charset koi8-r; #access_log /var/log/nginx/host.access.log main; location / { root /opt/app/code; index index.html index.htm; } #gzip使用 location ~ .*\.(jpg|gif|png)$ { gzip on; gzip_http_version 1.1; gzip_comp_level 2; gzip_types text/plain application/x-javascript text/css application/xml text/javascript application/x-httpd-php image/jpeg image/gif image/png; root /opt/app/code/images; } location ~ .*\.(txt|xml)$ { gzip on; gzip_http_version 1.1; gzip_comp_level 1; gzip_types text/plain application/x-javascript text/css application/xml text/javascript application/x-httpd-php image/jpeg image/gif image/png; root /opt/app/code/doc; } #gz文件预读 location ~ ^/download { gzip_static on; tcp_nopush on; root /opt/app/code; } error_page 500 502 503 504 /50x.html; location = /50x.html { root /usr/share/nginx/html; } }
http { gzip on; #开启gzip gzip_disable "msie6"; #IE6不使用gzip gzip_vary on; #设置为on会在Header里增加 "Vary: Accept-Encoding" gzip_proxied any; #代理结果数据的压缩 gzip_comp_level 6; #gzip压缩比(1~9),越小压缩效果越差,但是越大处理越慢,所以一般取中间值 gzip_buffers 16 8k; #获取多少内存用于缓存压缩结果 gzip_http_version 1.1; #识别http协议的版本 gzip_min_length 1k; #设置允许压缩的页面最小字节数,超过1k的文件会被压缩 gzip_types application/javascript text/css; #对特定的MIME类型生效,js和css文件会被压缩 include /etc/nginx/conf.d/*.conf; }
地址重写
有的时候我们的网站更换了域名,但还有用户在使用老的域名访问,这时可以通过nginx的地址重写来让用户跳转到新的域名进行访问。
server { listen 80; server_name www.aaa.com; rewrite "^/(.*)$" http://www.bbb.com/$1; #地址重写到新地址 location / { root /usr/share/nginx/html/docs; index index.html index.htm; } error_page 500 502 503 504 /50x.html; location = /50x.html { root /usr/share/nginx/html; } }
此时访问旧域名www.aaa.com会直接跳转到www.bbb.com去。
过期时间配置
location ~ .*\.(htm|html)$ { expires 24h; root /opt/app/code; }
跨域访问配置
允许http://www.bushro.com进行跨域访问。
location ~ .*\.(htm|html)$ { add_header Access-Control-Allow-Origin http://www.bushro.com; add_header Access-Control-Allow-Methods GET,POST,PUT,DELETE,OPTIONS; root /opt/app/code; }
防盗链
目的:防止资源被盗用
语法:valid_referers none | blocked | server_names | string...
说明:如果valid_referers条件判断未通过,nginx则会赋值invalid_referer 为true
location ~ .*\.(jpg|gif|png)$ { valid_referers none blocked 192.168.254.130; if ($invalid_referer) { return 403; } root /opt/app/code/images; }
none:不允许“Referer”来源头部为空的情况
blocked:“Referer”不为空,但是里面的值被代理或者防火墙删除了,这些值都不以http://或者https://开头,而是“Referer: XXXXXXX”这种形式
server_names “Referer”来源头部包含当前的server_names(当前域名)
代理服务
正向代理服务的对象:客户端
反向代理服务的对象:服务端
配置语法:
Syntax:proxy_pass URL;
Default:----
Context:location,if in location,limit_except
在conf.d目录下创建两个xx.conf的配置文件,只要值以conf结尾的配置文件都会被加载
8089端口配置
server { listen 8089; server_name localhost bushro.club; #charset koi8-r; #access_log /var/log/nginx/host.access.log main; location / { root /opt/app/code2; index index.html index.htm; } error_page 500 502 503 504 /50x.html; location = /50x.html { root /usr/share/nginx/html; } }
8060端口配置
server { listen 8060; server_name localhost bushro.club; location / { root /usr/share/nginx/html; index index.html index.htm; } location ~ /test_proxy.html$ { proxy_pass http://127.0.0.1:8089; } error_page 500 502 503 504 /50x.html; location = /50x.html { root /usr/share/nginx/html; } }
在8060这里访问会代理到http://127.0.0.1:8089下,就可以通过8060这个端口去访问8089下code2下的资源
跳转重定向配置:
Syntax:proxy_redirect default;
proxy_redirect off;proxy_redirect redirect replacement;
Default:proxy_redirect default;
Context:location,server,http
超时配置:
Syntax:proxy_connect_timeout time;
Default:proxy_connect_timeout 60s;
Context:location,server,http
扩张:proxy_read_timeout proxy_sent_timeout
综合配置:
location /{ proxy_pass http://127.0.0.1:8080; proxy_redirect default; #代理向后端发送的头信息 proxy_set_header Host $http_host; proxy_set_header X-Real_IP $remote_addr; #超时配置 proxy_connect_timeout 30; proxy_send_timeout 60; proxy_read_timeout 60; #nginx缓冲区配置 proxy_buffer_size 32k; proxy_buffering on; proxy_buffers 4 128k; proxy_busy_buffers_size 256k; proxy_max_temp_file_size 256k; }
可以把这些通用的单独放在一个文件里面让每个location引用include+文件名
负载均衡
通过80这个服务代理去访问8001,8001这两个端口的服务,默认采用轮询的方式
8001配置
server { listen 8001; server_name localhost bushro.club; location / { #在/opt/app/code1目录下有index.html页面 root /opt/app/code1; index index.html index.htm; } error_page 500 502 503 504 /50x.html; location = /50x.html { root /usr/share/nginx/html; } }
8002配置
server { listen 8002; server_name localhost bushro.club; location / { #在/opt/app/code2目录下有index.html页面 root /opt/app/code2; index index.html index.htm; } error_page 500 502 503 504 /50x.html; location = /50x.html { root /usr/share/nginx/html; } }
80端口配置
#负载均衡组的配置需要放在server外面,bushro这个是随便起的名字 upstream bushro{ server 192.168.254.130:8001; server 192.168.254.130:8002; } server { listen 80; server_name localhost bushro.club; location / { #所有的请求代理到上面的组里面去处理 proxy_pass http://bushro; #公告模块配置 include public; } error_page 500 502 503 504 /50x.html; location = /50x.html { root /usr/share/nginx/html; } }
可以在组里面进行一些参数配置:
参数 | 作用 |
down | 当前的server暂时不参与负载均衡 |
backup | 预留的备份服务器 |
max_fails | 允许请求失败的次数 |
fail_timeout | 经过max_fails失败后,服务暂停的时间 |
max_conns | 限制最大的接收的连接数 |
调度算法
参数 | 作用 |
轮询 | 按时间顺序逐一分配到不同的后端服务器 |
加权轮询 | weight值越大,分配到的访问几率越高 |
ip_hash | 每个请求按访问IP的hash结果分配,这样来自同一个IP的固定访问一个后端服务器 |
url_hash | 按照访问的URL的hash结果来分配请求,是每个URL定向到同一个后端服务器 |
least_conn | 最少连接数,那个机器连接数少就分发 |
hash关键数值 | hash自定义的key |
upstream bushro{ #对于同一个ip,发送到同一个服务器 #ip_hash #同一个url(也就是同一个资源请求)会到达同一台机器 #hash $request_uri }
缓存配置
upstream bushro{ server 192.168.254.130:8001; server 192.168.254.130:8002; } proxy_cache_path /opt/app/cache levels=1:2 keys_zone=bushro_cache:10m max_size=10g inactive=60m use_temp_path=off; server { listen 80; server_name localhost bushro.club; #charset koi8-r; #access_log /var/log/nginx/host.access.log main; location / { proxy_cache bushro_cache; proxy_cache_valid 200 302 304 60m; proxy_cache_valid any 10m; proxy_cache_key $host$uri$is_args$args; add_header Nginx-Cache "$upstream_cache_status"; proxy_pass http://bushro; proxy_next_upstream error timeout invalid_header http_500 http_502 http_503 http_504; include public; } error_page 500 502 503 504 /50x.html; location = /50x.html { root /usr/share/nginx/html; } }
proxy_cache_path:定义缓存存储位置 levels=1:2:设置缓存目录深度,最多能创建3层。 keys_zone=bushro:10m:定义缓存区域名称和内存缓存空间大小。 max_size=10g:磁盘缓存空间最大使用值,达到配额后删除最少使用的缓存文件。 inactive=60m:设置缓存时间,60分钟内没有被访问过就删除。 use_temp_path=off:不使用temp_path指定的临时存储路径,直接将缓存文件写入指定的cache文件中,建议off。 proxy_cache bushro:缓存区域名称,要和keys_zone定义的名称一致 proxy_cache_valid 200 302 304 60m:设置状态码为200 302 304过期时间为60分钟 proxy_cache_valid any 10m:其他状态的过期时间10分钟 proxy_cache_key $host$uri$is_args$args:设置缓存的key,这里是以域名、URI、参数组成web缓存的key值,根据key值哈希存储缓存内容到二级缓存目录内 proxy_next_upstream:当后端访问服务器出现了不正常错误时,去访问下一台服务器。 upstream_cache_status:添加一个请求头看缓存是否命中HIT:MISS
让部分页面不缓存:
if(request_uri ~ ^/(url2|login|register|password\//reset)){ set $cookie_nocache 1; } proxy_no_cache $cookie_nocache $arg_nocache $arg_comment; proxy_no_cache $http_pragma $http_authorization;