Py学习  »  NGINX

两个在diff端口上运行的服务的nginx proxy_pass配置

Ignacio Martínez • 4 年前 • 431 次点击  

我需要重定向或代理通过以下内容:

每个请求都以 /api/v1/ 致: @server 其他一切 / @client

我有 @服务器 在端口上运行 8080 @客户 在港口 8081 @client and @server 正在作为Docker容器运行。

注意。一切都应该使用https。 下面的配置是我所拥有的,但它不工作idkw

server {
  server_name example.com;

  listen 80;
  listen [::]:80 ipv6only=on;

  return 301 https://example.com$request_uri;
}

server {
    server_name example.com;

    listen 443 ssl;

    ssl_certificate     /etc/nginx/ssl/example.com.crt;
    ssl_certificate_key /etc/nginx/ssl/example.com.key;

    ...

    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;

    location /api/v1/ {
        try_files $uri @server;
    }

    location / {
        try_files $uri @client;
    }

    location @client {
        proxy_pass http://client:8081;
    }

    location @server {
        proxy_pass http://server:8080/api/v1/;
    }

}
Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/47093
 
431 次点击  
文章 [ 1 ]  |  最新文章 4 年前
Danila Vershinin
Reply   •   1 楼
Danila Vershinin    5 年前

如果你 必须 使用命名位置,然后可以使用 error_page 接近下面。

return 惯性导航与制导 未使用 http状态代码和 错误页面 对于设置为命名位置的代码,我们可以将请求转发到这些命名位置:

server {
  server_name example.com;

  listen 80;
  listen [::]:80 ipv6only=on;

  return 301 https://example.com$request_uri;
}

server {
    server_name example.com;

    listen 443 ssl;

    ssl_certificate     /etc/nginx/ssl/example.com.crt;
    ssl_certificate_key /etc/nginx/ssl/example.com.key;

    ...

    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;

    error_page 350 = @client;
    error_page 351 = @server;

    location /api/v1/ {
        return 351;
    }

    location / {
        return 350;
    }

    location @client {
        proxy_pass http://client:8081;
    }

    location @server {
        proxy_pass http://server:8080/api/v1/;
    }

}