PHP Web 端如何操作 Nginx 設定

2020-07-16 10:06:29

PHP Web端安全操作Nginx設定及熱重新啟動

前言

之前幫客戶整了一套基於GeoIP2的自動化AB站(Nginx Geoip2 處理不同國家 (或城市) 的存取 ),客戶最近想通過管理端手動控制AB站切換
ar414

不建議使用system,exec等執行shell命令的函數

  • 需要複雜的提權操作
  • 一般專案這些函數是被禁止
  • 作為一名合格的Phper除非特殊情況,否則是嚴禁在專案中啟用一些涉及到安全性的函數

方案思路

  1. Nginx vhost組態檔中include片段設定
  2. 後端切換AB站時,PHP邏輯中修改第一步中引入片段設定
  3. Nginx Reload
    • 第一種方案:小型專案使用crontab定時執行nginx -s reload(搭配worker_shutdown_timeout使用)
    • 第二種方案(推薦):修改後標記需要reload狀態(File or DB or Cache),定時器通過python指令碼查詢是否需要reload去執行nginx -s reload

方案一

1.建立片段組態檔

建立獨立片段Nginx組態檔,例如ar414.conf,然後在nginx vhostinclude

ar414.conf

root /www/wwwroot/ahost;

2.站點組態檔中include組態檔ar414.conf

site.conf

server {
        listen       80;
        server_name  0.0.0.0;
        index index.html;
        include /www/wwwroot/abhost/ar414.conf;
    }

3.後台邏輯中操作ar414.conf

if($data['site_set'] == AbHostSiteEnum::Ahost) {
    //開啟A站
    $ahostPath = AbHostSiteEnum::AhostPath;
    file_put_contents('./ar414.conf',"root {$ahostPath};");}else {
    //開啟B站
    $bhostPath = AbHostSiteEnum::BhostPath;
    file_put_contents('./ar414.conf',"root {$bhostPath};");}

4.Nginx全域性設定中設定worker_shutdown_timeout

30s內Nginx無法平滑退出,就強行關閉進程

nginx.conf

...worker_shutdown_timeout  30;

5.定時執行Nginx熱重新啟動

crontab -e

*/5 * * * * nginx -s reload
以上就是PHP Web 端如何操作 Nginx 設定的詳細內容,更多請關注TW511.COM其它相關文章!