繁体   English   中英

带有Docker容器的Nginx代理

[英]Nginx proxy with Docker containers

这是我的码头工人基础设施。

在端口80上服务的nginx Web服务器(公开给主机)

在端口80(不暴露给主机)上运行的媒体和博客在单独的容器下运行

所有运行在同一虚拟机上。


        Name                      Command               State         Ports
----------------------------------------------------------------------------------
media                  docker-php-entrypoint apac ...   Up      80/tcp
mysql_db_blog          docker-entrypoint.sh mysqld      Up      3306/tcp
mysql_db_media         docker-entrypoint.sh mysqld      Up      3306/tcp
webserver              nginx -g daemon off;             Up      0.0.0.0:80->80/tcp
blog                   docker-entrypoint.sh apach ...   Up      80/tcp

我的nginx配置:

server {
        listen 80 default_server;
        server_name 192.168.0.7;
        server_tokens off;

        location /story/ {
            proxy_pass         http://blog/;
            proxy_set_header   Host $host;
            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 $server_name;
        }

        location /videos/ {
            proxy_pass         http://media/;
            proxy_set_header   Host $host;
            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 $server_name;
        }
}

我的问题:

当我尝试访问以下任何URL时

1) http:// webserver / story

2) http:// webserver / videos

在第一个请求之后,最后一部分“故事”或“视频”将从网址中删除。

为了确保不会从URL中删除“故事”或“视频”,nginx conf缺少什么?

这与在节中编写proxy_pass方式有关。

proxy_pass

请求URI如下传递给服务器:

如果使用URI指定了proxy_pass指令,那么当请求传递到服务器时,与该位置匹配的规范化请求URI的一部分将被该指令中指定的URI代替:

location /name/ {
    proxy_pass http://127.0.0.1/remote/;
}

如果指定proxy_pass时不带URI,则将请求URI以与客户端在处理原始请求时发送的格式相同的形式传递给服务器,或者在处理更改的URI时传递完整的规范化请求URI:

location /some/path/ {
    proxy_pass http://127.0.0.1;
}

因此,更改您的proxy_pass:

location /videos/ {
    proxy_pass         http://media;

注意-缺少尾部斜杠,表示它保留了原始URI。

您可能还想看看rewrite因为它做了一些相关的事情。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM