使PHP和Nginx Docker镜像协同工作

时间:2017-05-25 20:03:56

标签: php nginx docker docker-compose

我尝试了许多建议,但无法使其正常工作。 我想创建一个docker-compose.yml合作NGINX-PHP的文件。

这就是我所做的:

version: "2"

services:
  nginx:
    image: nginx:latest
    restart: always
    ports: 
      - "80:80"
      - "443:443"
    links:
      - php
    depends_on:
      - php
    expose:
      - "80"
      - "443"
    volumes:
      - ./www:/var/www/html
      - ./config/nginx/site.conf:/etc/nginx/sites-available/default
      - ./config/nginx/site.conf:/etc/nginx/sites-enabled/default

  php:
    image: php:7-fpm
    restart: always
    volumes:
      - ./www:/var/www/html

Docker图片无误地运行,但当我想访问Nginx时,我明白了:

  

欢迎来到nginx!

     

如果您看到此页面,则表示已成功安装nginx Web服务器   和工作。需要进一步配置。

     

有关在线文档和支持,请参阅nginx.org。   nginx.com提供商业支持。

     

感谢您使用nginx。

我尝试登录两张图片并检查卷。我还检查了是否可以从php ping nginx。一切似乎都很好......

这是我的Nginx网站配置:

server {
    server_name ncp-docker;

    listen 80;
    index index.php index.html index.htm;
    root /var/www/html;

    error_log  /var/log/nginx/error.log;
    access_log /var/log/nginx/access.log;

    location ~ \.php$ {
        try_files $uri =404;
        fastcgi_split_path_info ^(.+\.php)(/.+)$;
        include fastcgi_params;
        fastcgi_pass php:9000;
        fastcgi_index index.php;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        fastcgi_param PATH_INFO $fastcgi_path_info;
    }

    location ~ /(inc|uploads/avatars) {
        deny all;
    }
}

3 个答案:

答案 0 :(得分:4)

您默认为默认服务器配置,因此您需要覆盖默认的nginx虚拟主机:

    - ./config/nginx/site.conf:/etc/nginx/conf.d/default.conf

使用它并删除已启用站点和可用站点的卷

答案 1 :(得分:2)

我认为你可能会错误地接近这个。

nginx配置不应该直接运行PHP。 PHP正在一个单独的容器上运行。

相反,你应该有PHP应用程序的nginx反向代理。

类似的东西:


server {
    listen 80;
    server_name yourdomain.example.com;
    location / {
        proxy_pass http://php:9000/;
        proxy_redirect off;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header Host $http_host;
        proxy_set_header X-NginX-Proxy true;
    }
 }

您可能需要添加/更改一些细节......但这是我切割的基本反向代理。在我需要时粘贴,在nginx中

答案 2 :(得分:1)

正如Robert建议您必须覆盖默认的nginx虚拟主机,但我想补充一点,您还可以为您的nginx容器添加额外的Dockerfile并避免使用卷。在docker-compose.yml中,您必须使用image: nginx:latest更改build: ./nginx/。对于Dockerfile,这样的事情可以解决这个问题:

FROM nginx:latest
RUN rm /etc/nginx/conf.d/default.conf
ADD conf.d/ /etc/nginx/conf.d/  #Replace the default nginx virtual host

我发现这更容易,因为稍后您可以轻松地向容器添加更多内容,例如HTTPS连接的SSL证书:

ADD ssl/ /etc/nginx/ssl/    

这将为您节省使用卷,并使您的生活更轻松,以便将来的nginx设置。