这是我的码头工具。
nginx webserver在端口80上提供服务(暴露给主机)
在单个容器
下运行的端口80(未暴露给主机)上的媒体和博客服务所有在同一个VM上运行。
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;
}
}
我的问题:
当我尝试访问以下任何网址时
在第一次请求后,最后一部分“故事”或“视频”会从网址中删除。
我在nginx conf中遗漏了什么,以确保“故事”或“视频”不会从网址中删除?
答案 0 :(得分:0)
关于如何在你的节中写出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: / p>
location /some/path/ {
proxy_pass http://127.0.0.1;
}
所以改变你的proxy_pass:
location /videos/ {
proxy_pass http://media;
注意 - 缺少尾部斜杠,意味着它保留了原始URI。
您可能还希望查看rewrite
,因为它会执行相关操作。