簡體   English   中英

無法讓 PHP 在 Nginx 上服務 -- 錯誤 502 網關錯誤

[英]Cannot get PHP to serve on Nginx -- Error 502 Bad Gateway

我對 nginx 還很陌生,並認為用它來服務 php 會非常簡單,因為這種設置很常見,但它似乎比我預期的要復雜得多。

這是我的配置..

    server {
            listen 80;
            server_name domain.com www.domain.com;

            location / {
                    root   /srv/www/domain.com/public_html;
                    index index.php;
            }

    # serve static files directly
    #location ~* ^.+.(jpg|jpeg|gif|css|png|js|ico|html|xml|txt)$
    #    access_log        off;
    #    expires           30d;

            location ~ [^/]\.php(/|$) {
                    fastcgi_split_path_info ^(.+?\.php)(/.*)$;
                    if (!-f $document_root$fastcgi_script_name) {
                            return 404;
                    }

                    fastcgi_pass /var/run/php5-fpm.sock;
                    fastcgi_index index.php;
                    include fastcgi_params;
            }
    }

如果我用“index.html”文件替換“index.php”,nginx 完美地提供了 html。 但是切換到 php 會導致 502 錯誤。

我看過指南建議修改從 iptables 到 php-fpm 到 php.ini 到 fast-cgi 到可用站點的任何內容..?

我不確定這些教程中的許多正在嘗試做什么......現在我只想讓我的 index.php 提供 phpinfo()。 下一步是什么?

是否有明確的指南來介紹可用於為 php 和 nginx 提供服務的各種選項?

您必須安裝php-fpm並添加此部分: http//wiki.nginx.org/PHPFcgiExample

我假設您已成功安裝php-fpm(FastCGI Process Manager)

轉到php-fpm/php.ini

找到行cgi.fix_pathinfo=1 ,取消注釋並將值1更改為0

cgi.fix_pathinfo=0

現在重啟php-fpm服務。

通過您的終端

service php5-fpm restart (我不確定你的Linux發行版必須是一樣的)

這可能是權限問題,您可以在日志文件中識別錯誤

  • 從日志中提取記錄

    022/08/09 20:37:27 [crit] 3930#0: *17 connect() to unix:/var/run/php/php-fpm.sock 在連接到上游客戶端時失敗(13:權限被拒絕) :192.168.80.36,服務器:127.0.0.1,請求:“GET /info.php HTTP/1.1”,上游:“fastcgi://unix:/var/run/php/php-fpm.sock:”,主機: “127.0.0.1”

這提供了服務器沖突的線索,現在要驗證運行哪個用戶,我們需要檢查 php-fpm 和 nginx 工作節點

  • 工作節點執行命令ps aux | grep 'nginx' ps aux | grep 'nginx'這將指示 nginx 工作節點的用戶,在這種情況下它是nobody

    root@ubuntu:/var/nginx/html# ps aux | grep 'nginx'

  • 沒有人3930 0.0 0.0 37636 3784? S 20:37 0:00 nginx:工作進程

  • 檢查 php fpm 服務執行命令ps aux | grep 'php-fpm' ps aux | grep 'php-fpm'在我的情況下,它將指示用戶為“www-data”

    root@ubuntu:/var/nginx/html# ps aux | grep 'php'

  • www-數據1320 0.0 0.2 498796 11908? S 19:34 0:00 php-fpm: 池 www

  • www-數據 1323 0.0 0.2 498796 11908? S 19:34 0:00 php-fpm: 池 www

為了解決這個沖突,在 nginx.conf 文件中,您必須在頂部定義用戶派生為 www-data 即用戶 www-data;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM