首页 > 解决方案 > 服务器上的 nginx 无法连接到 docker php-fpm

问题描述

我在服务器上运行 nginx,而不是在 docker 容器中,因为获取工作 SSL 时遇到问题。我有一个分别运行 my-sql 和 php-fpm 的 docker 容器。当我运行所有这些时,我找不到文件,我不知道为什么。

当我跑步sudo nginx -t时它说一切都很好,但file not found我跑步后仍然得到sudo systemctl restart nginx

我的 Nginx 文件:

server {
    listen 80;
    listen [::]:80;
    server_name njord-assets.com www.njord-assets.com;

client_max_body_size 108M;

    access_log /var/log/nginx/application.access.log;

    root /var/www/njord-assets.com/public;
    index index.php;

    if (!-e $request_filename) {
        rewrite ^.*$ /index.php last;
    }

    location ~ \.php$ {
        fastcgi_pass localhost:9000;
        fastcgi_index index.php;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        fastcgi_param PHP_VALUE "error_log=/var/log/nginx/application_php_errors.log";
        fastcgi_buffers 16 16k;
        fastcgi_buffer_size 32k;
        include fastcgi_params;
    }

}

server {
    listen 443 ssl;
    server_name njord-assets.com www.njord-assets.com;

    ssl_certificate /etc/letsencrypt/live/njord-assets.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/njord-assets.com/privkey.pem;
    ssl_trusted_certificate /etc/letsencrypt/live/njord-assets.com/chain.pem;


client_max_body_size 108M;

    access_log /var/log/nginx/application.access.log;

    root /var/www/njord-assets.com/public;
    index index.php;

    if (!-e $request_filename) {
        rewrite ^.*$ /index.php last;
    }

    location ~ \.php$ {
        fastcgi_pass localhost:9000;
        fastcgi_index index.php;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        fastcgi_param PHP_VALUE "error_log=/var/log/nginx/application_php_errors.log";
        fastcgi_buffers 16 16k;
        fastcgi_buffer_size 32k;
        include fastcgi_params;
    }

}

码头工人撰写文件:

###############################################################################
#                          Generated on dev.io                          #
###############################################################################
version: "3.1"
services:

    redis:
      restart: always
      image: redis:alpine
      container_name: my-asset-management-redis

    mysql:
      restart: always
      image: mysql:8.0
      container_name: my-asset-management-mysql
      working_dir: /application
      volumes:
        - .:/application
        - mysql-data:/var/lib/mysql
      environment:
        - MYSQL_ROOT_PASSWORD=root
        - MYSQL_DATABASE=app
        - MYSQL_USER=user
        - MYSQL_PASSWORD=pass

    php-fpm:
      restart: always
      build: docker/production/php-fpm
      container_name: my-asset-management-php-fpm
      working_dir: /application
      volumes:
        - .:/application
        - ./docker/production/php-fpm/php-ini-extras.ini:/etc/php/7.4/fpm/conf.d/99-extras.ini
      ports:
        - "9000:9000"

我已经检查并且我的 Nginx 错误日志正在返回

2020/05/31 10:50:50 [error] 932#932: *570 FastCGI sent in stderr: "Primary script unknown" while reading response header from upstream, client: 81.149.1.9, server: njord-assets.com, request: "GET / HTTP/1.1", upstream: "fastcgi://127.0.0.1:9000", host: "njord-assets.com"

标签: phpdockernginxserverdocker-compose

解决方案


问题是 nginx 文件需要让根是容器内的根而不是外部的根,所以:

root /var/www/njord-assets.com/public;

应该:

root /application/public;

推荐阅读