簡體   English   中英

Docker上的NginX和Php-Fpm

[英]NginX and Php-Fpm on docker

我有一個官方的docker NginX容器(NginX:latest)連接到了官方的基於Php-Fpm(php:7.2-fpm)的容器,並使用綁定掛載進行配置和源代碼(用於測試)。 他們正在通過FastCGI進行通信。 我正在運行Windows 2.0.0的Docker Edge。 (引擎18.09)。

php應用程序正在提供html頁面,並且每個頁面上都有一些XHR請求,以從同一應用程序獲取JSON數據。

一切正常,除了第二個XHR請求生成錯誤。 頁面本身會加載,然后在文檔就緒事件中處理兩個XHR請求,但是只有其中一個(最常見的是第一個)成功完成,第二個導致404錯誤。

響應中未No input file specified. 錯誤,泊塢窗控制台顯示以下錯誤:

php-fpm: WARNING: [pool www] child 8 said into stderr: "ERROR: Unable to open primary script: /var/www/html/web/app.php (No such file or directory)"

Nginx: *235 FastCGI sent in stderr: "Unable to open primary script: /var/www/html/web/app.php (No such file or directory)" while reading response header from upstream, client: 192.168.16.2, server: my-server.com, request: "GET /cli/cli_har_rc.php?EVENT=GET&THREAD=2 HTTP/1.0", upstream: "fastcgi://192.168.16.3:9000", host: "my-server.com", referrer: "https://my-server.com/cli/cli_har.php"

這很奇怪,因為文件存在,並且當我在單獨的瀏覽器選項卡中使用相同的請求時,它運行良好。 有時還會發生這樣的情況,即請求的順序被瀏覽器互換,並且無論第一個是成功的,都只有第一個成功。 似乎請求並發起着作用。

NginX site.conf:

server {
    set $request_url $request_uri;

    listen 80;
    server_name my-server.com;
    root /var/www/html/web;

    location / {
        try_files $uri /app.php?$args;
    }

    location ~ \.php$ {
        fastcgi_split_path_info ^(.+\.php)(/.+)$;
        fastcgi_pass fpm_cw:9000;
        include fastcgi_params;
        fastcgi_param SCRIPT_FILENAME $document_root/app.php;
        fastcgi_param SCRIPT_NAME /app.php;
        fastcgi_param PATH_INFO $fastcgi_path_info;
        fastcgi_param REQUEST_URI $request_url;
    }
}

當我與XHR請求調用之間有一段距離(1-2秒)時,它可以按預期工作。 Windows處理上的docker內部處理延遲似乎是問題。 我還沒有在Linux機器上檢查它。

您還可以通過在池配置文件中將pm指令設置為static並將pm.maxchildren設置為1來告訴PHP-FPM僅使用一個進程,從而防止對文件的任何並發訪問。

https://github.com/docker/for-win/issues/2005#issuecomment-391822753

該問題是由Windows上的Docker綁定安裝的組合引起的。 我沒有走得更遠,但是似乎問題在帶有生產容器的生產機器上解決了,該生產機器沒有綁定安裝,但是整個項目在構建時被復制。

暫無
暫無

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

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