如何使用docker设置nginx以从外部本地网络工作

时间:2016-10-08 09:13:11

标签: nginx docker

我使用的是一个使用docker的Synology nas,我使用nginx和php。 如果我用它的端口号连接到我的网站,我可以连接到我的网站, 但我想要的是不要使用端口号从外面到达它。

所以我的问题是如何在没有端口号的情况下连接到它,或者如何托管我的网站以便将其连接到www.mydomain.com?

本地网络 - 10.0.1.15:8080(作品)

公共网络 xxx.xxx.xxx:8080(工程)

配置文件:

server {
    listen 80 default_server;
    root /var/www/html/public;
    index index.html index.php;

    charset utf-8;

    location / {
        try_files $uri $uri/ /index.php?$query_string;
    }

    location = /favicon.ico { access_log off; log_not_found off; }
    location = /robots.txt  { access_log off; log_not_found off; }

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

    sendfile off;

    client_max_body_size 100m;

    location ~ \.php$ {
        fastcgi_split_path_info ^(.+\.php)(/.+)$;
        fastcgi_pass php:9000;
        fastcgi_index index.php;
        include fastcgi_params;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        fastcgi_intercept_errors off;
        fastcgi_buffer_size 16k;
        fastcgi_buffers 4 16k;
    }

    location ~ /\.ht {
        deny all;
    }
}

搬运工-compose.yml

nginx:
    build: ./nginx/
    ports:
        - 8080:80
    links:
        - php
    volumes_from:
        - app

php:
    build: ./php/
    expose:
        - 9000
    links:
        - mysql
    volumes_from:
        - app


composer:
    image: composer/composer
    volumes_from: 
        - app

app:
    image: php:7.0-fpm
    volumes:
        - .:/var/www/html
    command: "true"



mysql:
    image: mysql:latest
    volumes_from:
        - data
    environment:
        MYSQL_ROOT_PASSWORD: secret
        MYSQL_DATABASE: dbname
        MYSQL_USER: username
        MYSQL_PASSWORD: password

data:
    image: mysql:latest
    volumes:
        - /var/lib/mysql
    command: "true"



phpmyadmin:
    image: phpmyadmin/phpmyadmin
    ports:
        - 8888:80
    links:
        - mysql
    environment:
        PMA_HOST: mysql

1 个答案:

答案 0 :(得分:0)

您正在Docker主机上的端口nginx上发布8080。您应该在端口80上发布它,如果它尚未被打开yourdomain.com,默认为80上的http端口。

另一种选择是在端口nginx80上运行另一个reverse proxy容器,通过http标头在不同端口上的不同容器上运行。这种方法允许您在端口80443上托管多个网站,在Docker主机上的不同容器中。

示例nginx配置:

  server {
      listen       80;
      server_name  somename1.yourdomain.com;

      location / {
        proxy_pass  http://nginxContainerName:8080;
      }
  server {
      listen       80;
      server_name  somename2.yourdomain.com;

      location / {
        proxy_pass  http://synologysContainerName:8081;
      }
  server {
      listen       80;
      server_name  somename3.yourdomain.com;

      location / {
        proxy_pass  http://phpmyadminContainername:8888;
      }
    }

确保您已创建用户定义的网络:

docker network create mynetwork

然后将所有容器放入其中。