2016-05-04 36 views
1

我有兩個wordpress實例,每個都作爲一個docker容器運行。我想通過單個nginx服務器前端/代理這兩個wordpress實例。如何使用nginx前端運行兩個docker容器的兩個WordPress站點。

以下是我的nginx配置文件。

upstream docker-site1 { 
server site1_site; 
} 

upstream docker-site2 { 
server site2_site; 
} 

server { 
    listen   80; 
    server_name myserver.domain.com; 

    proxy_set_header Host "myserver.domain.com"; # required for Docker client sake 
    proxy_set_header X-Real-IP $remote_addr; #pass on real client IP 
    client_max_body_size 0; # disable any limits to avoid HTTP 413 for large image uploads 
    # required to avoid HTTP 411: see issue #1486 (https://github.com/dotcloud/docker/issues/1486) 
    chunked_transfer_encoding on; 

    location /site2 { 
    auth_basic "Restricted"; 
    auth_basic_user_file /etc/nginx/pass/.site1_htpasswd; 
    proxy_set_header Host $http_host; 
    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 X-Forwarded-Host $host; 
    proxy_set_header X-Forwarded-Server $host; 
    proxy_pass http://docker-site2/; 

    } 

    location/{ 
    auth_basic "Restricted"; 
    auth_basic_user_file /etc/nginx/pass/.site1_htpasswd; 
    proxy_set_header Host $http_host; 
    add_header HTTP_HOST $http_host; 
    proxy_pass http://docker-site1; 
    proxy_http_version 1.1; 
    } 
} 
+0

此配置是否會導致問題?什麼是錯誤? – Josh

+0

這不是碼頭問題。只是nginx配置... –

+0

即時使用myserver.domain.com/site2時無法訪問site2 –

回答

0

有一個nginx代理映像可自動將您的容器自動分發。你可以找到它here。運行代理這樣的:

$ docker run -d -p 80:80 -v /var/run/docker.sock:/tmp/docker.sock:ro jwilder/nginx-proxy 

然後,你必須與可變

$docker run -e VIRTUAL_HOST=foo.bar.com ... 
$docker run -e VIRTUAL_HOST=bar.foo.com ... 

或環境中運行你的WordPress的圖像,更好的,在您的Dockerfile添加ENV指令和暴露的端口

# My Wordpress 1 Dockerfile 
ENV VIRTUAL_HOST=foo.bar.com 
EXPOSE 80 
+0

非常感謝您的回答。但我的問題是,我沒有多個域指向不同的網站,如果我有它,我可以使用多個conf.d配置文件,並做與nginx代理正在做的相同的事情 –

0

我已經做了使用反向代理與ssl雖然相同。首先,你的一切重定向到HTTPS,然後:

server { 
    listen *:443 ssl; 
    ssl on; 
    ssl_protocols TLSv1 TLSv1.1 TLSv1.2; 
    ssl_certificate   /etc/nginx/certs/certbundle.pem; 
    ssl_certificate_key  /etc/nginx/certs/server.key; 
    ssl_dhparam    /etc/nginx/certs/dhparam.pem; 

    server_name myserver.domain.com; 

    location /site1/ { 
      proxy_pass http://127.0.0.1:8030/; #your wordpress container should have the same port 

      proxy_set_header Host $http_host; 

      proxy_read_timeout  3500; 
      proxy_connect_timeout 3250; 

      proxy_set_header X-Real-IP   $remote_addr; 
      proxy_set_header Host    $host; 
      proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 
      proxy_set_header X-Forwarded-Proto https; 


      proxy_set_header SSL_PROTOCOL  $ssl_protocol; 
      proxy_set_header SSL_CLIENT_CERT $ssl_client_cert; 
      proxy_set_header SSL_CLIENT_VERIFY $ssl_client_verify; 
      proxy_set_header SSL_SERVER_S_DN $ssl_client_s_dn; 

      auth_basic "Area 51 - No trespassing beyound this point without authentication"; 
      auth_basic_user_file sec/htpasswd; 
    } 

    location /site2/ { 
      proxy_pass http://127.0.0.1:8080/; # again, change the port 

      proxy_set_header Host $http_host; 

      proxy_read_timeout  3500; 
      proxy_connect_timeout 3250; 

      proxy_set_header X-Real-IP   $remote_addr; 
      proxy_set_header Host    $host; 
      proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 
      proxy_set_header X-Forwarded-Proto https; 


      proxy_set_header SSL_PROTOCOL  $ssl_protocol; 
      proxy_set_header SSL_CLIENT_CERT $ssl_client_cert; 
      proxy_set_header SSL_CLIENT_VERIFY $ssl_client_verify; 
      proxy_set_header SSL_SERVER_S_DN $ssl_client_s_dn; 

      auth_basic "Area 51 - No trespassing beyound this point without authentication"; 
      auth_basic_user_file sec/htpasswd; 
    } 

在你的第一個網站的wp-config.php文件,你應該添加此行:

define('WP_HOME', 'https://myserver.domain.com;/site1'); 
define('WP_SITEURL', 'https://myserver.domain.com;/site1'); 

請確保您連接到數據庫。我猜你正在爲你的數據庫使用另一個容器?如果是在你的wp-config.php文件相應地配置這些屬性

define('DB_NAME', 'youDbName'); #default is wordpress 
define('DB_USER', 'root');  
define('DB_PASSWORD', 'yourPass');  
define('DB_HOST', 'mysql'); # your db container name  
define('DB_CHARSET', 'utf8'); 
define('DB_COLLATE', ''); 

它應該是或多或少不使用SSL相同

編輯:
和杉杉指出,要確保你運行你的容器與-p選項和您想要的端口,即站點1 -p 8030:80

相關問題