Nginx (engine x) 是一个高性能的HTTP和反向代理web服务器,同时也提供了IMAP/POP3/SMTP服务。Nginx是由伊戈尔·赛索耶夫为俄罗斯访问量第二的Rambler.ru站点(俄文:Рамблер)开发的。
基本概念 反向代理 正向代理 在客户端(浏览器)中配置代理服务器,通过代理服务器进行互联网访问。
反向代理 负载均衡 动静分离 高可用 install http://nginx.org/en/download.html
安装依赖 pcre 解压pcre压缩包,进入目录执行
1 2 3 ./configure make && make install
查看版本号
zlib与openssl 1 yum -y install make zlib zlib-devel gcc-c++ libtool openssl openssl-devel
或者使用yum
一键安装上述3个依赖 1 yum -y install gcc zlib zlib-devel pcre-devel openssl openssl-devel
安装 nginx 解压nginx压缩包,进入目录执行
1 2 3 ./configure make && make install
使用
nginx的启动脚本在nginx/sbin
文件夹下面
测试 1 2 3 4 cd /usr/local/nginx/sbin ./nginx ps -ef | grep nginx
配置防火墙 查看防火墙规则:
添加规则:
1 2 firewall-cmd --add-service=http =permanent sudo firewall-cmd --add-port=80/tcp --permanent
重启防火墙:
nginx 常用命令 进入nginx根目录或者将其添加到PATH
1 cd /usr/local/nginx/sbin
查看nginx版本号
启动nginx
关闭nginx
重新加载nginx nginx.conf
文件内容修改后需要重新加载才能生效,此命令可以使得在不重启nginx情况下应用修改
配置文件nginx.conf
1 cd /usr/local/nginx/conf
配置文件由3部分组成:
全局块:从配置文件开始到events块之间的内容,主要会设置一些影响nginx服务器整体运行的配置指令
events块:主要影响nginx服务器与用户的网络连接,常用的设置包括是否开启对多worker processes下的网络连接进行序列化,是否允许同时接受多个网络连接,选取暗中事件驱动模型来处理连接请求,每个word process可以同时支持的最大连接数等
http块:包含http全局块和server块,代理、缓存和日志等绝大多数功能和第三方模块的配置都在这里
http全局块:包括文件引入、MIME-TYPE协议、日志自定义、连接超时时间、单链接请求数上限等
server块:包含全局server块和location块,和虚拟主机有密切关系,虚拟主机从用户角度看和一台独立的硬件主机完全一样,该技术主要用于节省互联网服务器硬件成本
全局server块:最常见的配置是虚拟主机的监听配置和本虚拟主机的名称或IP配置
location块:一个server块可以配置多个location块,这个块的主要作用是基于nginx服务器收到的请求字符串(例如:server_name/uri-string),对虚拟主机名称(或IP别名)之外的字符串(例如:/uri-string)进行匹配,对特定的请求进行处理。地址定向、数据缓存和应答控制等功能,还有许多第三方模块的配置也在这里。
全局块 1 2 3 4 5 6 7 8 #user nobody; worker_processes 1; #nginx服务器并发处理关键配置,worker_processes值越大,可以支持的并发处理量越多,但是受硬件、软件等设备制约 #error_log logs/error.log; #error_log logs/error.log notice; #error_log logs/error.log info; #pid logs/nginx.pid;
events块 1 2 3 events { worker_connections 1024; #表示每个worker processes支持的最大连接数为1024 }
http块 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 http { # 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; server { # server块 listen 80; # 目前监听端口号 server_name localhost; # 主机名称 #charset koi8-r; #access_log logs/host.access.log main; location / { root html; 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 alias 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; # } #} }
location指令说明 该指令用于匹配URL
语法如下:
=
: 用于不含正则表达式的URI前,要求请求字符串与URI严格匹配,如果匹配成功,就停止继续向下搜索并立即处理该请求
~
: 用于表示URI包含正则表达式,并且区分大小写
~*
: 用于表示URI包含正则表达式,并且不区分大小写
^~
: 用于不含正则表达式的URI前,要求Nginx服务器找到标识URI和请求字符串匹配度最高的location后,立即使用此location处理请求,而不再使用location块中的正则URI和请求字符串做匹配
操作实例 反向代理实例 实例一 实现效果:浏览器输入网址www.123.com跳转到本地Tomcat页面
下载并解压Tomcat,进入bin目录启动Tomcat
开放端口
1 2 3 sudo firewall-cmd --add-port=8080/tcp --permanent firewall-cmd -reload firewall-cmd --list-all
修改配置文件
1 2 3 4 5 6 7 8 9 server { listen 80; server_name www.123.com; location / { proxy_pass http://www.123.com:8080; index index.html index.htm index.jsp; } }
实例二 实现效果:根据访问的路径跳转到不同端口的服务中
1 2 3 4 5 6 7 8 9 10 11 server { listen 9001; server_name localhost; location ~ /edu/ { # ~符号表示后接正则表达式,表示访问的路径中包含edu字符串就跳转到8080 proxy_pass http://localhost:8080; } location ~ /vod/ { proxy_pass http://localhost:8081; } }
负载均衡实例 实现效果:通过浏览器的地址栏输入地址(http://localhost/edu/a.html),使得请求平均分配到8080与8081端口中
关键配置:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 http { #..... upstream myserver { ip_hash; server 192.168.17.129:8080 weight=1; server 192.168.17.129:8081 weight=1; } #..... server { location / { #..... proxy_pass http://myserver; proxy_connect_timeout 10; } } }
配置案例:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 worker_processes 1; events { worker_connections 1024; } http { include mime.types; default_type application/octet-stream; sendfile on; keepalive_timeout 65; upstream myserver { ip_hash; server 192.168.17.129:8080 weight=1; server 192.168.17.129:8081 weight=1; } server { listen 80; server_name 192.168.17.129; location / { proxy_pass http://myserver; proxy_connect_timeout 10; root html index index.html index.htm } } }
负载均衡的分配方式
轮询(默认):每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器down掉,能自动剔除。
weight:权重,weight和访问比率成正比,用于后端服务器性能不均的情况,例如:
A服务器weight=5
,B服务器weight=10
,则B会收到的流量为A的一倍,即A会收到全部流量的1/3,B为2/3
ip_hash:每个请求按IP的hash结果分配,每个访客固定访问一个后端服务器,可以解决session的问题
fair: 按照后端服务器的访问时间来分配,时间短的优先分配
1 2 3 4 upstream myserver { server 192.168.17.129:8080; server 192.168.17.129:8081; }
1 2 3 4 upstream myserver { server 192.168.17.129:8080 weight=5; server 192.168.17.129:8081 weight=10; }
1 2 3 4 5 upstream myserver { ip_hash; server 192.168.17.129:8080; server 192.168.17.129:8081; }
1 2 3 4 5 upstream myserver { server 192.168.17.129:8080; server 192.168.17.129:8081; fair; }
动静分离实例 通过location
指定不同的后缀名实现不同的请求转发。通过expires
参数设置,可以使浏览器缓存过期时间,减少与服务器之前的请求和流量。
Expores
:给一个资源设定一个过期时间,无需服务器端验证,而是由浏览器去确认该资源是否过期,不会产生额外的流量。适用于不经常变动的资源。比如设置为3d
表示3天之内访问这个URL,浏览器会发送一个请求来对比服务器该文件最后更新时间有无变化,若无则不会从服务器抓取,返回状态码304
,如果有修改则直接从服务器下载,返回状态码200
实现效果:
浏览器中输入地址http://192.168.17.129/image/01.jpg
浏览器中输入地址http://192.168.17.129/www/a.html
文件结构:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 worker_processes 1; events { worker_connections 1024; } http { include mime.types; default_type application/octet-stream; sendfile on; keepalive_timeout 65; server { listen 80; server_name 192.168.17.129; location /www/ { root /data/; index index.html index.htm } location /image/ { root /data/; autoindex on; # 在浏览器中列出当前文件夹中的内容 } } }
高可用集群 多台Nginx同时工作,若其中一台宕机服务不会中断。
需要:
2台服务器192.168.17.129, 192.168.17.131
两台服务器安装Nginx
两台服务器安装keepalived
1 yum install keepalived -y
配置文件/etc/keepalive.conf
:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 #全局配置 global_defs { notification_email { acassen@firewall.loc failover@firewall.loc sysadmin@firewall.loc } notification_email from Alexandre.Cassen@firewall.loc smtp_server 192.168.17.129 smtp_connect timeout 30 router_id LVS_DEVEL # 唯一取值,可写服务器名字(配置在hosts里的domian)也可写IP } # 脚本配置 vrrp_script chk_http_port { script "/usr/local/src/nginx_check.sh" # 检测脚本路径 interval 2 # 检测脚本执行间隔 weight 2 # 权重参数 } vrrp_instance VI_1 { state BACKUP # 备份服务器上将MASTER改为BACKUP interface ens33 # 网卡 virtual_router_id 51 # 主、备机的virtual_router_id 必须相同 priority 100 # 主、备机取不同的优先级,主机值较大,备份机值较小 advert_int 1 # 时间间隔,每隔多久发送一个心跳,单位秒 authentication { # 权限校验方式 auth_type PASS # 类型:密码 auth_pass 1111 # 密码值 } virtual_ipaddress { 192.168.17.50 # VRRP H虚拟地址 } }
检测脚本/usr/local/src/nginx_check.sh
:
1 2 3 4 5 6 7 8 9 #!/bin/bash A=`ps -C nginx -no-header |wc -l`if [ $A -eq 0 ]; then /usr/local/nginx/sbin/nginx sleep 2 if [ `ps -C nginx -no-header |wc -l` -eq 0 ]; then killall keepalived fi fi
查看网卡名:
Nginx原理分析 master 和 worker Nginx启动之后在Linux系统中其实有两个进程,分别叫nginx: master
, nginx: worker
当客户端发送一条请求给master之后,然后由worker来争抢该条请求,当worker抢到之后变进行请求转发或反向代理给Tomcat来响应请求
一个master和多个worker的好处:
可以使用nginx -s reload
热部署。在进行热部署时,已经在执行任务的worker继续执行,没有任务的worker重新加载,有任务的worker任务执行完毕后再加载新配置文件。
对于每个worker进程来说,独立的进程,不需要加锁,所以省掉了锁带来的开销。
独立的进程互相之间不会相互影响,一个进程退出后,其它的进程还在工作,服务不会中断。若单个worker进程遇到异常退出了,会导致当前worker上的所有请求失败,不会影响到其它worker在处理的请求。
需要设置多少个worker Nginx和redis类似都采用了io多路复用机制,每个worker都是一个独立的进程,但每个进程只有一个主线程,通过异步非阻塞的方式来处理请求。每个worker的线程可以把一个cpu的性能发挥到极致。所以worker数和服务器的cpu核数相等是最为适宜的。设少了浪费cpu,设多了会造成cpu频繁切换上下文带来的损耗。
反向代理配置文件案例 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 #user nobody; worker_processes 1; # nginx服务器并发处理关键配置,worker_processes值越大,可以支持的并发处理量越多,但是受硬件、软件等设备制约 #error_log logs/error.log; #error_log logs/error.log notice; #error_log logs/error.log info; #pid logs/nginx.pid; events { worker_connections 1024; # 表示每个worker processes支持的最大连接数为1024 } 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; server_names_hash_max_size 512; server_names_hash_bucket_size 1024; #gzip on; # upstream 负载均衡关键配置 # The ngx_http_upstream_module module is used to define groups of servers that can be referenced by the proxy_pass, fastcgi_pass, uwsgi_pass, scgi_pass, memcached_pass, and grpc_pass directives. # 定义server用于给后面的proxy_pass使用 # 参考:https://blog.csdn.net/caijunsen/article/details/83002219 upstream www-pixiv-net { # 每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器down掉,能自动剔除 server 210.140.131.223:443; server 210.140.131.225:443; server 210.140.131.220:443; } upstream sketch-pixiv-net { server 210.140.174.37:443; server 210.140.170.179:443; server 210.140.175.130:443; } upstream sketch-hls-server { server 210.140.214.211:443; server 210.140.214.212:443; server 210.140.214.213:443; } upstream imgaz-pixiv-net { server 210.140.131.145:443; server 210.140.131.144:443; server 210.140.131.147:443; server 210.140.131.153:443; } upstream i-pximg-net { server 210.140.92.140:443; server 210.140.92.137:443; server 210.140.92.139:443; server 210.140.92.142:443; server 210.140.92.134:443; server 210.140.92.141:443; server 210.140.92.143:443; server 210.140.92.136:443; server 210.140.92.138:443; server 210.140.92.144:443; server 210.140.92.145:443; } server { listen 80 default_server; # default_server 指令可以定义默认的 server 去处理一些没有匹配到 server_name 的请求,如果没有显式定义,则会选取第一个定义的 server 作为 default_server rewrite ^(.*) https://$host$1 permanent; # 网站添加了https证书后,当http方式访问网站时就会报404错误,所以需要做http到https的强制跳转设置 # rewrite语法: # rewrite <regex> <replacement> [flag]; # 关键字 正则 替代内容 flag标记 # 关键字:其中关键字error_log不能改变 # 正则:perl兼容正则表达式语句进行规则匹配 # 替代内容:将正则匹配的内容替换成replacement # flag标记:rewrite支持的flag标记 # flag标记说明: # last: 本条规则匹配完成后,继续向下匹配新的location URI规则 # break: 本条规则匹配完成即终止,不再匹配后面的任何规则 # redirect: 返回302临时重定向,浏览器地址会显示跳转后的URL地址 # permanent: 返回301永久重定向,浏览器地址栏会显示跳转后的URL地址 # rewrite的组要功能是实现URL地址的重定向。Nginx的rewrite功能需要PCRE软件的支持,即通过perl兼容正则表达式语句进行规则匹配的。默认参数编译nginx就会支持rewrite的模块,但是也必须要PCRE的支持 } server { listen 443 ssl; # 443是https的默认端口 server_name pixiv.net; # server name 为虚拟服务器的识别路径。因此不同的域名会通过请求头中的HOST字段,匹配到特定的server块,转发到对应的应用服务器中去 server_name www.pixiv.net; server_name ssl.pixiv.net; server_name accounts.pixiv.net; server_name touch.pixiv.net; server_name oauth.secure.pixiv.net; ssl on; # 使用HTTPS,需要安装OpenSSL ssl_certificate ca/pixiv.net.crt; ssl_certificate_key ca/pixiv.net.key; # HTTPS私钥 client_max_body_size 50M; # 用nginx作代理服务器,上传大文件的大小有限制(限制请求体的大小,若超过所设定的大小,返回413错误) location / { proxy_pass https://www-pixiv-net; proxy_set_header Host $http_host; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Real_IP $remote_addr; proxy_set_header User-Agent $http_user_agent; proxy_set_header Accept-Encoding ''; proxy_buffering off; # 主要是实现被代理服务器的数据和客户端的请求异步 # A为客户端,B为代理服务器,C为被代理服务器。 # 当proxy_buffering开启,A发起请求到B,B再到C,C反馈的数据先到B的buffer上, # 然后B会根据proxy_busy_buffer_size来决定什么时候开始把数据传输给A。 # 在此过程中,如果所有的buffer被写满,数据将会写入到temp_file中。 # 相反,如果proxy_buffering关闭,C反馈的数据实时地通过B传输给A。 } } server { listen 443 ssl; server_name i.pximg.net; ssl on; ssl_certificate ca/pixiv.net.crt; ssl_certificate_key ca/pixiv.net.key; location / { proxy_pass https://i-pximg-net; proxy_set_header Host $http_host; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Real_IP $remote_addr; proxy_set_header User-Agent $http_user_agent; proxy_set_header Accept-Encoding ''; proxy_buffering off; } } server { listen 443 ssl; server_name sketch.pixiv.net; ssl on; ssl_certificate ca/pixiv.net.crt; ssl_certificate_key ca/pixiv.net.key; location / { proxy_pass https://sketch-pixiv-net; proxy_set_header Host $http_host; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Real_IP $remote_addr; proxy_set_header User-Agent $http_user_agent; proxy_set_header Accept-Encoding ''; proxy_buffering off; } # Proxying WebSockets location /ws/ { proxy_pass https://sketch-pixiv-net; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade"; proxy_set_header Host $host; } } server { listen 443 ssl; server_name *.pixivsketch.net; ssl on; ssl_certificate ca/pixiv.net.crt; ssl_certificate_key ca/pixiv.net.key; location / { proxy_pass https://sketch-hls-server; proxy_set_header Host $http_host; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Real_IP $remote_addr; proxy_set_header User-Agent $http_user_agent; proxy_set_header Accept-Encoding ''; proxy_buffering off; } } server { listen 443 ssl; server_name factory.pixiv.net; ssl on; ssl_certificate ca/pixiv.net.crt; ssl_certificate_key ca/pixiv.net.key; location / { proxy_pass https://210.140.131.180/; proxy_set_header Host $http_host; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Real_IP $remote_addr; proxy_set_header User-Agent $http_user_agent; proxy_set_header Accept-Encoding ''; proxy_buffering off; } } server { listen 443 ssl; server_name dic.pixiv.net; server_name en-dic.pixiv.net; server_name sensei.pixiv.net; server_name fanbox.pixiv.net; server_name payment.pixiv.net.pixiv.net; ssl on; ssl_certificate ca/pixiv.net.crt; ssl_certificate_key ca/pixiv.net.key; location / { proxy_pass https://210.140.131.222/; proxy_set_header Host $http_host; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Real_IP $remote_addr; proxy_set_header User-Agent $http_user_agent; proxy_set_header Accept-Encoding ''; proxy_buffering off; } } server { listen 443 ssl; server_name imgaz.pixiv.net; server_name comic.pixiv.net; server_name novel.pixiv.net; server_name source.pixiv.net; server_name i1.pixiv.net; server_name i2.pixiv.net; server_name i3.pixiv.net; server_name i4.pixiv.net; ssl on; ssl_certificate ca/pixiv.net.crt; ssl_certificate_key ca/pixiv.net.key; location / { proxy_pass https://imgaz-pixiv-net; proxy_set_header Host $http_host; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Real_IP $remote_addr; proxy_set_header User-Agent $http_user_agent; proxy_set_header Accept-Encoding ''; proxy_buffering off; } } upstream wikipedia-server { server 198.35.26.96:443; server 103.102.166.224:443; } server { listen 443 ssl; server_name *.wikipedia.org; server_name *.m.wikipedia.org; ssl on; ssl_certificate ca/pixiv.net.crt; ssl_certificate_key ca/pixiv.net.key; location / { proxy_pass https://wikipedia-server/; proxy_set_header Host $http_host; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Real_IP $remote_addr; proxy_set_header User-Agent $http_user_agent; proxy_set_header Accept-Encoding ''; proxy_buffering off; } } server { listen 443 ssl; server_name *.steamcommunity.com; server_name steamcommunity.com; ssl on; ssl_certificate ca/pixiv.net.crt; ssl_certificate_key ca/pixiv.net.key; location / { proxy_pass https://23.61.176.149/; proxy_set_header Host $http_host; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Real_IP $remote_addr; proxy_set_header User-Agent $http_user_agent; proxy_set_header Accept-Encoding ''; proxy_buffering off; } } server { listen 443 ssl; server_name *.steampowered.com; server_name steampowered.com; ssl on; ssl_certificate ca/pixiv.net.crt; ssl_certificate_key ca/pixiv.net.key; location / { proxy_pass https://104.112.84.145/; proxy_set_header Host $http_host; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Real_IP $remote_addr; proxy_set_header User-Agent $http_user_agent; proxy_set_header Accept-Encoding ''; proxy_buffering off; } } server { listen 443 ssl; server_name *.archiveofourown.org; server_name archiveofourown.org; ssl on; ssl_certificate ca/pixiv.net.crt; ssl_certificate_key ca/pixiv.net.key; location / { proxy_pass https://104.153.64.122/; proxy_set_header Host $http_host; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Real_IP $remote_addr; proxy_set_header User-Agent $http_user_agent; proxy_set_header Accept-Encoding ''; proxy_buffering off; } } }
链接