Nginx
Nginx & 多個 php-fpm 版本
我嘗試使用 Nginx 和 Ubuntu 20.04 為基於不同版本的 PHP 的多個站點提供服務)。所以我安裝了 php-fpm 版本 5.6 和 7.4 並像這樣配置 Nginx:
server { root /var/www; server_name xxxxxx.xxxxx.xxxxxx; # managed by Certbot index index.php; include snippets/fastcgi-php.conf; location / { try_files $uri $uri/ =404; } # PHP 5 locations location /site5 { fastcgi_pass unix:/var/run/php/php5.6-fpm.sock; } # PHP 7 locations location /site7 { fastcgi_pass unix:/var/run/php/php7.4-fpm.sock; } location ~ /\.ht { deny all; } listen [::]:443 ssl ipv6only=on; # managed by Certbot listen 443 ssl; # managed by Certbot ssl_certificate /etc/letsencrypt/live/xxxxxx.xxxxx.xxxxxx/fullchain.pem; # managed by Certbot ssl_certificate_key /etc/letsencrypt/live/xxxxxx.xxxxx.xxxxxx/privkey.pem; # managed by Certbot include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot } server { if ($host = xxxxxx.xxxxx.xxxxxx) { return 301 https://$host$request_uri; } # managed by Certbot listen 80 ; listen [::]:80 ; server_name xxxxxx.xxxxx.xxxxxx; return 404; # managed by Certbot }
在 site5 和 site7 下執行 phpinfo() 的頁面執行良好,並告訴我每個站點的正確版本。
但我對靜態內容有疑問。
首先,引用的圖像返回 403。來自 Nginx 的錯誤日誌說:
"Access to the script '/var/www/site7/whatever.jpg' has been denied (see security.limit_extensions)"
將 的值更改
security.limit_extensions
為false
in/etc/php/fpm/7.4/pool.d/www.conf
後,圖像可以正確顯示。但是現在,如果我直接通過其 URL 訪問圖像,它要麼作為文本返回(使用 Content-Type 文本/html),要麼我得到 404(即使文件在那裡)。
www-data 使用者是文件的所有者,權限為 755。
我從來沒有在 fpm 中使用過 PHP,所以我完全迷失了……所以我有兩個問題:
security.limit_extensions
設置為有問題false
嗎?- 我能做些什麼來確保文件,無論它們是什麼,都可以訪問?
非常感謝你的幫助。
您的配置將對所有資源的請求傳遞給 PHP,這不是您想要的。
如果您只有包含
.php
副檔名的 URL,則以下方法有效:location ~ ^/site5.*\.php$ { fastcgi_pass unix:/var/run/php/php5.6-fpm.sock; } location ~ ^/site7.*\.php$ { fastcgi_pass unix:/var/run/php/php7.4-fpm.sock; }
但是,如果您的應用程序實現了前端控制器模式,那麼您需要額外的設置:
location /site5 { try_files $uri $uri/ site5/index.php; } location /site7 { try_files $uri $uri/ site7/index.php; }