如何在 nginx 中重写或代理 url?

如何在 nginx 中重写或代理 url?

我是 nginx 新手。我想重写

feature-1234.mydomain.com/xyz?foo=bar

docker-feature-1234:9000/xyz?foo=bar

带有请求参数。

我使用官方 nginx docker 镜像。我的 nginx.conf 文件应该是什么样子?

编辑:'feature-1234' 是一个变量,因此:

功能-5678.mydomain.com

应该作为

docker-功能-5678:9000

答案1

通过结合答案,我找到了解决方案。

https://serverfault.com/questions/388552/nginx-sub-domain-proxy-pass

https://stackoverflow.com/questions/35744650/docker-network-nginx-resolver

https://stackoverflow.com/questions/41766195/nginx-emerg-server-directive-is-not-allowed-here

nginx.conf:

events {
}

http {
  server {
    listen 80;
    server_name ~(.*).test.go;

    location / {
      if ($host ~* ^([a-zA-Z0-9-]+)\.test\.go$) {
        set $proxyhost docker-$1:9000;
      }

      resolver 127.0.0.11 ipv6=off;
      proxy_pass http://$proxyhost;
      proxy_http_version 1.1;
      proxy_set_header Upgrade $http_upgrade;
      proxy_set_header X-Forwarded-For $remote_addr;
      proxy_set_header X-Real-IP $remote_addr;
      proxy_set_header Host $host;

    }
  }
}

谢谢

答案2

站点配置文件

服务器令牌关闭;

地图 $http_upgrade $connection_upgrade { 默认升级;''
关闭;}

服务器 {

设置 $access_log'var/log/nginx/my-site.access.log'; 设置 $error_log'var/log/nginx/my-site.error.log';

听 80;服务器名称 feature-1234.mydomain.com;

访问日志/$访问日志;错误日志/$错误日志;

地点 / {

proxy_pass docker-feature-1234:9000;

proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection $connection_upgrade;
proxy_set_header X-Forwarded-For $remote_addr;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header Host $host;

if ($uri != '/') { expires 30d;}
access_log /$access_log;

} }

粘贴

触摸/etc/nginx/sites-available/site.conf

下一个

ln -s /etc/nginx/sites-available/site.conf /etc/nginx/sites-enabled

下一个

服务 nginx 重新加载

如果你没有 root 权限,请在命令开头添加 sudo

相关内容