Nginx+php 架構下解決不輸出 $_SERVER['HTTPS'] 問題


使用$_SERVER['HTTPS']來判斷是http還是https,但在Nginx+PHP-FPM架構下,
nginx使用fastcgi_pass指令將請求傳遞給PHP-FPM,但是在使用fastcgi_pass時,Nginx默認不會將HTTPS傳遞給PHP-FPM。
如果你使用的是Apache,它就會自動設置HTTPS服務器變量,PHP代碼可以通過$ _SERVER ['HTTPS']檢查以確定請求是HTTPS還是HTTP。
那現在就需要需改nginx配置或者PHP程序來解決問題。
基於服務器的兼容性考慮,還是修改nginx配置。
因為很多CMS程序(WordPress,Drupal,...)都是使用$ _SERVER ['HTTPS']來確定請求是HTTPS還是HTTP。
修改方法如下:
方法1:增加 一個fastcgi_param 環境變量即可。
fastcgi_param  HTTPS 'on';
將上述代碼添加至網站對應的Nginx配置文件中。
但要注意,按我理解,這樣也會導致一個問題。因為這種方式屬於寫死環境變量,在此環境變量生效的區域,
服務器無法判斷是http請求還是https請求。如果你的站點兩種請求都支持,
建議把兩種請求的配置分開寫,
類似與人工預設請求的類型。我的網站決定已經只支持https,
所以這種方式問題不大,http的請求也設置了跳轉至https。所以我只需要是寫在虛擬機配置文件中即可。
方法2:修改web程序的判斷方式

不要只根據環境變量來判斷,增加一個請求的端口的判斷條件。

我們一般HTTP請求都使用80端口,而HTTPS則使用443端口。按照這個思路,可以將上訴文件中的代碼改為如下所示。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM