[英]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时
在第一个请求之后,最后一部分“故事”或“视频”将从网址中删除。
为了确保不会从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.