加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 运营中心 > Nginx > 正文

Nginx proxy_pass和绝对路径

发布时间:2020-12-13 21:39:58 所属栏目:Nginx 来源:网络整理
导读:我正在尝试在服务器(Ubuntu 14.04)上运行一些nodejs应用程序,使用Nginx,我差不多完成了.这是我的服务器配置(/ etc / nginx / sites-available / default): server { listen 80; server_name my_domain.com; location /test1 { proxy_pass http://127.0.0.1:

我正在尝试在服务器(Ubuntu 14.04)上运行一些nodejs应用程序,使用Nginx,我差不多完成了.这是我的服务器配置(/ etc / nginx / sites-available / default):

server {
    listen 80;
    server_name my_domain.com;

    location /test1 {
        proxy_pass http://127.0.0.1:5000/;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection 'upgrade';
        proxy_set_header Host $host;
        proxy_cache_bypass $http_upgrade;
    }

    location /test2 {
        proxy_pass http://127.0.0.1:5001/;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection 'upgrade';
        proxy_set_header Host $host;
        proxy_cache_bypass $http_upgrade;
    }
}

我已经运行了几个应用程序,它们都运行良好,我可以通过http://my_domain.com/test1,http://my_domain.com/test2等访问它们…

问题是,在这个应用程序中,我有几个绝对路径:
例如< a href =“/”> Home< / a>
或(内部快递)
res.redirect( ‘/’);

此重定向不会转到http://my_domain.com/test1,但会转到http://my_domain.com/
有没有办法,通过nginx配置,告诉应用程序根位置实际上是http://my_domain.com/test1?

我对nginx和一般的虚拟主机都很陌生,我正在努力学习……任何帮助都会受到赞赏.
编辑:
curl -I http://127.0.0.1:5000的结果是:

HTTP/1.1 200 OK
X-Powered-By: Express
Content-Type: text/html; charset=utf-8
Content-Length: 1376
ETag: W/"560-GGm/YYltkhKxiOVNZ99jqQ"
set-cookie: connect.sid=s%3AkZYCqLKvbhHhK3W8ECBN8G91s41paws4.ekLWefrd3NdQatT3VzFNozfnFs65YBEW9k9MNTdbQT0; Path=/; HttpOnly
Date: Sat,15 Aug 2015 13:13:20 GMT
Connection: keep-alive  

如你所见,我没有得到位置标题…
顺便说一句,我设法使用子域解决问题,这似乎按照我的预期工作……无论如何,答案将不胜感激,因为我将来可能需要它.

最佳答案
我发现这项工作的唯一方法是使用HttpSubModule并添加sub_filter指令.鉴于您的示例,它可能如下所示:

sub_filter 'href="/' 'href="/test1/';
sub_filter "redirect('/')" "redirect('/test1/')";

显然,您的匹配越具体,您需要添加的选项就越多.如果你不那么具体,比如只匹配“/或’/那么你需要更少的规则但是会遇到代替错误的东西的危险.

您可能还需要添加:

sub_filter_types *;

所以它不仅匹配text / html(这是默认值),还匹配javascript和css文件.显然*是懒惰的方法,可能会破坏事物,使用特定的mimetypes应该是首选.

最终,正确的方法是修复Web应用程序.大多数Web框架都支持基本url / root url / url前缀(这似乎没有标准名称),你可以设置它以避免这个问题.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读