想要实现访问 http://aaa.com/abc 实现访问 http://aaa.com:8080 的效果。 但是浏览器上显示 http://aaa.com/abc nginx 的配置文件怎么写
location /abc/ { proxy_pass http://aaa.com:8080 } 不行啊?
1 Elissa 2022-03-22 16:55:40 +08:00 location /abc 最后别带 /试试,或者访问的时候也带着 /,总之访问时和配置文件保持完全一致 |
2 hdp5252 OP |
![]() | 3 linfx7 2022-03-22 17:22:34 +08:00 getenforce 看看,selinux 会拦截 nginx 到本机其他端口的请求 |
![]() | 4 dier 2022-03-22 17:31:59 +08:00 ![]() location /abc/ { ... proxy_pass http://localhost:8080/; ... } |
![]() | 5 ![]() 解释一下我上面的配置,浏览器访问 abc.com/abc/index.html ,nginx 代理的 URL 是 localhost:8080/index.html 。理论上就是你要的效果,但是这种配法可能会有部分静态资源显示 404 。 |
![]() | 6 zxw567 2022-03-22 17:49:58 +08:00 |
7 hdp5252 OP @dier 感谢,可以跳转到 8080 端口,但是输入密码后还是无法显示网页 8080 端口是阿里云的 webdav 。 |
8 hdp5252 OP |
![]() | 9 adoal 2022-03-22 19:04:05 +08:00 ![]() 反向代理(不要把这个称为转跳,301/302 那种才是转跳)其实是一件挺复杂的事。前面的代理服务器的配置就已经挺麻烦了,有时候仅仅配对前面,后面的业务系统没有“意识到”自己处在反代后面从而做出一些行为调整,也会导致反代的效果不太对。 Nginx 的`proxy_pass`后面参数,写完主机名和端口号,如果不跟路径就结束,那它的意思其实是把传进来的 URI 的全路径直接附加到指定的主机后面,并不会剥掉`location`里指定的前缀`/abc`,所以 8080 上的业务系统就找不到了,所以需要按#4 的写法。 但是这样写了之后,后面的业务系统仍然是按照自己服务在根路径下来运行的,也就是说生成的页面内绝对 URL 并不会多一个`/abc`,这样对前端浏览器(或走 HTTP 协议的其它客户端)来说就错掉了。所以一个业务系统要运行在反代后面,其实是要跟前面的反代约定好,如何让业务系统知道自己要服务的子路径等信息。有的 web 框架会通过特定的 HTTP header 来做这事,有的则提供了通过配置参数来指定的方法,如果什么都没有,那就得在业务系统里自己实现这个逻辑了。 看了一眼你用的这个软件……注意到有个参数:`--root <ROOT>`,看起来像你需要的东西。 |