本次專案原因:
目前公司有三套環境:
1、正式環境
2、測驗環境
3、集成環境
新配小程式業務在正式/測驗環境運行都正常,但配到本地集成環境服務器時報404 not found,
開始耗費腦細胞:
首先訪問本地域名發現404是由php框架展現的,并不是由nginx展現,

跟開發對了下,開發同學堅持認為是因為nginx路由轉發有問題,導致php路由重寫未生效,
排查nginx.conf檔案
server {
listen 80;
server_name ci.bidding.gufeibao.com;
access_log /home/wwwlogs/ci.bidding.gufeibao.com.access.log main;
error_log /home/wwwlogs/ci.bidding.gufeibao.com.error.log;
set $root /home/www/gfbphp/gfbbidding;
root "$root/public";
location / {
if ($request_method = 'OPTIONS') {
return 204;
}
index index.php index.html;
try_files $uri $uri/ /index.php?$query_string;
}
location ~\.php$ {
fastcgi_pass unix:/tmp/php-cgi.sock;
fastcgi_index index.php;
include fastcgi_params; fastcgi_param SCRIPT_FILENAME $document_root/$fastcgi_script_name;
}
error_page 404 /404.html;
location = /404.html {
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
}
}
可以很準確的看到路由轉發是已經配上的,
try_files $uri $uri/ /index.php?$query_string;
去看了下報錯日志

因為我也是個半吊子..開始的時候看到fastcgi去找了9000,還以為是nginx去找php時找錯了,因為php的啟動方式為 /tmp/php-cgi.sock,
[global]
pid = /usr/local/php/var/run/php-fpm.pid
error_log = /usr/local/php/var/log/php-fpm.log
log_level = notice
[www]
listen = /tmp/php-cgi.sock
listen.backlog = -1
listen.allowed_clients = 127.0.0.1
listen.owner = gfb
listen.group = gfb
listen.mode = 0666
user = www
group = www
pm = dynamic
pm.max_children = 60
pm.start_servers = 30
pm.min_spare_servers = 30
pm.max_spare_servers = 60
pm.max_requests = 1024
pm.process_idle_timeout = 10s
request_terminate_timeout = 100
request_slowlog_timeout = 0
slowlog = var/log/slow.log
接著去查看9000埠,不出所料是空的沒錯

緊接著噩夢就來了,,
1、首先把php啟動方式更改為9000
listen = 127.0.0.1:9000
重啟php,并把nginx里 fastcgi_pass 指向9000
fastcgi_pass 127.0.0.1:9000;
再次訪問發現依舊404,報錯與之前一樣,
2、接著開始去比對集成環境的conf檔案和另外兩個環境有什么不同
該代碼段為測驗環境代碼
# Load configuration files for the default server block.
location / {
index index.php index.html *;
add_header Access-Control-Allow-Origin *;
add_header Access-Control-Allow-Methods 'GET, POST, OPTIONS, PATCH, POST, PUT, DELETE';
add_header Access-Control-Allow-Headers 'DNT,X-Mx-ReqToken,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Authorization';
if ($request_method = 'OPTIONS') {
return 204;
}
try_files $uri $uri/ /index.php?$query_string;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
error_page 404 /404.html;
location = /404.html {
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
}
}
發現測驗環境有配置跨域訪問add_header
但本專案不涉及到跨域,只是php專案
為了保險我把集成環境的conf添加了add_header
再次訪問依舊404...
3、到了現在我已經耗費了2個多小時,我已經開始懷疑是開發同學的代碼有問題了,就讓開發同學在流水線重新部署一次代碼,結果發現還是404,并且開發同學還是堅持認為是nginx配置有問題,,,
4、到了現在我已經疲了,我把測驗環境的conf直接替換到集成環境,毫無意義,依舊404
5、ok換個思路,我把集成環境404的conf,域名更換為另一個專案域名,root路徑也指向另一個專案的代碼庫,其余不更改,發現可以正常訪問,
到了這步我可以確定nginx是沒有問題的,問題出在開發同學那里,
經過很久很久他的排查,發現是.env檔案沒有放進去......
我他媽!草!
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/339093.html
標籤:其他
上一篇:『PHP』手把手教你使用phpstorm+xdebug除錯php代碼(保姆級教程)
下一篇:《軟體方法》第一章自測題
