Nginx反向代理配置使Mojolicious $ self-> req-> url-> to_abs丢弃端口号

问题描述 投票:1回答:2

坚持实施“快速而肮脏的” Web资源链接共享功能,该功能应根据以下情况工作:

  • 用户列出数据库中的项目,点击编辑
  • 系统打开带有所选应用程序的编辑模式对话框
  • 系统在this应用程序实例中显示到this项的链接,因此用户可以通过几个选项卡Ctrl + C或Cmd + C it ...

所以我在mojolicious模板中有以下代码,在没有nginx反向代理的情况下,Mojolicious可以完美地将其转换为正确的绝对URL:

 <input id="modal-dia-share-lnk" @focus="this.document.execCommand('selectAll',false,null)"
 :value="'<%=  $self->req->url->to_abs =%>?&'+'with=id-eq-'+this.$attrs.id.replace('dia-','')" readonly>

这相当于:

http://host-name:8082/qto/list/monthly_issues_202004?&with=id-eq-200327122837哪个HAS端口

但是,在反向代理后面运行时,它会忽略端口,因此即使我在端口441上运行生成的URL是NOT是否具有端口http://qto.fi/qto/list/monthly_issues_202004?&with=id-eq-200325163720

在此setup中这是不可接受的,因为dev的Mojo应用程序层必须正在监听端口441,而prd的Mojo应用程序层必须正在监听端口443

您实际上可以在两种情况下都获得该场景:

  • dev中的第qto个应用层实例>
  • prd中的qto应用层实例
  • 只需单击确定即可以默认的匿名用户身份登录...

我可以根据应用程序的现有配置来构建url,但是我想应该有快速的nginx hack可以通过location指令中的某些正则表达式或其他方式实际上包括端口。

这是反向代理conf

server {

  listen 443 ssl;
  server_name qto.fi;
  server_tokens off;

  ssl_certificate /etc/letsencrypt/live/qto.fi/fullchain.pem;
  ssl_certificate_key /etc/letsencrypt/live/qto.fi/privkey.pem;

  location / {
    proxy_pass http://localhost:8080/;
    proxy_http_version 1.1;
    proxy_pass_header Authorization;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection "upgrade";
    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-Proto $scheme;
    proxy_read_timeout 10s;
  }
}

还有以下http conf用于开发站点:

server {
    listen 78;
    listen [::]:78;

    server_name qto.fi;
    proxy_set_header Host $host;
    proxy_set_header X-Forwarded-For $remote_addr;

    location / {
        proxy_pass http://localhost:8078/;

         proxy_http_version 1.1;
         proxy_set_header Upgrade $http_upgrade;
         proxy_set_header Connection "upgrade";
         proxy_set_header Host $host;
         proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
         proxy_set_header X-Forwarded-Proto $scheme;
         proxy_set_header X-Real-IP        $remote_addr;
         proxy_set_header X-Forwarded-For
         $proxy_add_x_forwarded_for;
         # ....

    }
}

坚持执行“快速而又肮脏的” Web资源链接共享功能,该功能应根据以下情况工作:用户列出数据库中的项目,单击编辑系统上的按钮...

perl vue.js nginx reverse-proxy mojolicious
2个回答
2
投票

将端口添加到nginx反向代理conf中的Host标头:


0
投票

一种解决方法,但可能不是真正的解决方案,]

通过proxy_set_header Host $host:78;建立网址

© www.soinside.com 2019 - 2024. All rights reserved.