客戶反映:說自己的網站走Nginx代理后,打開空白。直接IP加地址訪問是好的(http://ip:port)
故障排查:
1、打開chrome瀏覽器,訪問了下,訪問情況真是客戶描述的那樣。
2、感覺打開chrome ,開發者工具,發現部分請求URL是404,css和js的
3、找客戶要服務器登錄的賬號,檢查nginx配置文件
upstream www.test.com{ server 127.0.0.1:8080; } server { listen 80; listen 443 ssl http2; ssl_certificate /usr/local/nginx/conf/ssl/www.test.com.pem; ssl_certificate_key /usr/local/nginx/conf/ssl/www.test.com.key; server_name www.test.com; access_log /data/wwwlogs/www.test.com_nginx.log combined; index index.html index.htm index.jsp; root /data/wwwroot/www.test.com; location ~ .*.(js|css)?$ { expires 7d; access_log off; } ? location / { proxy_pass http://www.test.com; include proxy.conf; } }
4、大家有發現上面配置有問題不?剛開始我也沒有注意,自認為配置文件是對 的。
打算檢查nginx的日志,一遍請求URL,一遍查看nginx果然還是404.(感覺疑惑),明明配置了proxy_pass http://www.test.com。
故障原因:
是因為 “location ~ .*.(js|css)?$” 這個匹配攔截掉了,請求不能正常發往下一個“location /” ,也就不能正常抵達后端proxy_pass了。
解決方法:
第一種解決方法:是將后端的靜態文件(css 和js ),放入前置nginx 機器/data/wwwroot/www.test.com
第二種解決方法 :修改配置文件
upstream www.test.com{ server 127.0.0.1:8080; } server { listen 80; listen 443 ssl http2; ssl_certificate /usr/local/nginx/conf/ssl/www.test.com.pem; ssl_certificate_key /usr/local/nginx/conf/ssl/www.test.com.key; server_name www.test.com; access_log /data/wwwlogs/www.test.com_nginx.log combined; index index.html index.htm index.jsp; root /data/wwwroot/www.test.com; ? location ~ .*.(js|css)?$ { proxy_pass http://www.test.com; expires 7d; access_log off; } ? location / { proxy_pass http://www.test.com; include proxy.conf; } }
?