我想访问https://photo.abc.com
代理到192.168.2.6/photo/
上面,我在location加上/photo/
可以通过https://photo.abc.com/photo/
访问到,请教如何隐藏或 301 跳转,直接通过https://photo.abc.com
访问呢?
谢谢!
这是代码
server
{
listen 443 ssl http2;
server_name photo.abc.com;
ssl_certificate /etc/default/cert.pem;
ssl_certificate_key /etc/default/privkey.pem;
location /photo/ {
proxy_set_header Host $host:$proxy_port;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-F大带宽服务器or $proxy_add_x_forwarded_for;
proxy_pass https://192.168.2.6/photo;
}
}
直接 location / {...;proxy_pass https://192.168.2.6/photo;}
如果像您那样写,会报 400 Bad Request
https://192.168.2.6/photo 改为 https://192.168.2.6/photo/ 呢?
我这边是没有问题的
我后端提示「无法加载数据」,只有像我题目里那样加上 /photo/访问就正常了,能用 301 处理一下吗?我对 nginx 不太熟悉,谢谢
301 跳转
server {
...
return 301 https://photo.abc.com$request_uri
}
代理的话 说的应该是对的,有可能是你们后端软件恰巧不支持被反代。
不太清楚 https://192.168.2.6/photo/ 上是什么东西
如果只是单纯的静态文件,你可以通过设置 nginx 指定文件夹来进行反向代理
location / {
alias 静态文件目录;
}
如果是动态路由,那我感觉使用 301 状态码可以会跟你预期的效果不符
但是 301 跳不进内网
还是搞清楚为啥这样不能反代,首先你得弄清理代理成功了吗?如果成功了,在分析下一步原因吧
server
{
listen 443 ssl http2;
server_name photo.abc.com;
ssl_certificate /etc/default/cert.pem;
ssl_certificate_key /etc/default/privkey.pem;
location / {
proxy_set_header Host $host:$proxy_port;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass https://192.168.2.6/photo/;
}
}
```
server {
server_name photo.abc.com;
root /var/www/html/photo;
index index.html index.htm;
location / {
try_files $uri $uri/ /index.html;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/html;
}
}
server {
if ($host = photo.abc.com) {
return 301 https://$host$request_uri;
}
listen 80;
server_name photo.abc.com;
return 404;
}
我怀疑 192.168.2.6/photo/这个本身会有跳转或者非相对连接,应该先正常访问一下看看会连到什么地方
举个例子,192.168.2.6/photo/是入口,但是里面有些数据是要连到 192.168.2.6/或者 192.168.2.6/abc/
rewrite
photo 后面加 /
location /photo { proxy_pass https://xxx.xx.xxx/photo }
或者
location /photo/ { proxy_pass https://xx/photo/ }
改一个明显的错误
把 proxy_pass https://192.168.2.6/photo; 改成 proxy_pass http://192.168.2.6/photo;
你之前不成功可能是证书问题