Nginx

在 aws 上使用 django 和 php 設置 nginx

  • August 7, 2017

我正在嘗試在 AWS / Linux AMI 上為 django app 和 php 設置 nginx。Nginx 已經被配置為同時為多個 django 應用程序工作並且一切正常。

現在我需要包含基於 php 的第三方解決方案。這應該適用於單獨的 url /dash/。

我經歷了許多教程和“堆棧”答案,但沒有一個對我有用。

我已經安裝了 php 和 php-fpm。我在 /etc/php-fpm-5.5.d/www.conf 修改了配置文件,並嘗試同時使用套接字和 TCP/IP:

listen = 127.0.0.1:9000

並且

listen = /var/run/php-fpm.sock

重新啟動 php-fpm 服務後,我檢查了套接字是否已真正創建。然後我相應地修改了nginx:

location ~ /dash/$ {
   try_files $uri =404;
   fastcgi_split_path_info ^(.+\.php)(/.+)$;
   #fastcgi_pass   127.0.0.1:9000;
   fastcgi_pass unix:/var/run/php-fpm.sock;
   fastcgi_index  index.php;
   include        fastcgi_params;
}

我創建了 test.php 文件來測試 php,並將第三方解決方案放在 /usr/share/nginx/html/ 中。當我嘗試訪問https://DOMAIN/dash/時,出現 404 錯誤(或者如果我刪除try_files設置,則會出現空白頁)。但是,當我嘗試訪問https://DOMAIN/dash/index.php>或<https://DOMAIN/test.php時,瀏覽器會為我提供一個文件供我下載 - 我希望生成 html 的實際 index.php 文件為了我。我使用 wget 得到相同的結果。

service php-fpm status聲稱php-fpm-5.5 (pid 12345) is running...所以我認為應該處理 php 文件。

我已經嘗試通過更改屬性listen.ownerlist.group以及usergroupto來更改 php-fpm 配置nobodyec2-user或者nginx我仍然得到相同的 404。

我已經嘗試過這個參數 fastcgi_param SCRIPT_FILENAME ... ,但由於我不確定這裡到底應該是什麼,所以我刪除了它。我想現在我們使用fastcgi_param文件中的預設值: fastcgi_param SCRIPT_NAME $fastcgi_script_name;

如果您發現一些明顯的錯誤或我忽略的內容,請告訴我。如果有任何錯誤的術語,我深表歉意。

location需要處理以 . 結尾的 URI .php。如果您的配置正在下載您的 PHP 文件,那麼您可能已經root正確地進行了設置。

SCRIPT_NAME許多安裝在包含的文件中都有一個合適的值fastcgi_params,但下面的範例顯示它明確說明(以防萬一)。

例如:

root ...;

location ~ \.php$ {
   try_files $uri =404;
   #fastcgi_pass  127.0.0.1:9000;
   fastcgi_pass   unix:/var/run/php-fpm.sock;
   include        fastcgi_params;
   fastcgi_param  SCRIPT_FILENAME $request_filename;
}    

在這種情況下,不需要fastcgi_split_path_infoand指令。fastcgi_index始終在fastcgi_param語句之後放置語句include,否則您的指令可能會被靜默覆蓋。

引用自:https://serverfault.com/questions/867173