如何使用nginx

时间:2018-12-07 23:36:09

标签: django nginx devops ghost-blog

我有2个网站:

  • api.example.com(一个Django应用)
  • example.com(带有Ghost的博客)

这是我当前用于博客(根域)的nginx设置

server {
listen 80 default_server;
listen [::]:80 default_server ipv6only=on;

server_name example.com

root /usr/share/nginx/html;
index index.html index.htm;

# this was created by ghost one click deploy on DigitalOcean
location / {
    proxy_pass http://localhost:2369;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header Host $http_host;
    proxy_set_header X-Forwarded-Proto $scheme;
    proxy_buffering off;
}

我正在尝试这样做,以便可以转到example.com/api并查看api.example.com的内容,但不会被重定向,并且地址栏中的网址应显示example.com/api

我什至不知道这个词的正确性。掩蔽?

1 个答案:

答案 0 :(得分:0)

您所需要的称为反向代理。试试这个配置:

server {
    listen 80 default_server;
    listen [::]:80 default_server ipv6only=on;
    server_name example.com;
    resolver <some_name_server_ip_here>;

    root /usr/share/nginx/html;
    index index.html index.htm;

    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header X-Forwarded-Proto $scheme;
    proxy_buffering off;
    location / {
        proxy_set_header Host $http_host;
        proxy_pass http://localhost:2369;
    }
    location /api {
        proxy_set_header Host api.example.com;
        proxy_pass http://api.example.com;
    }
}

如果您使用域名指定支持的api.example.com,则需要在server配置中添加resolver指令。或者,您可以使用IP地址指定它,而不使用resolver指令。无论如何,您都需要使用proxy_set_header指令明确指定api后端服务器名称。如果有本地名称服务器,则可以将其用作resolver指令参数,也可以使用外部名称(例如Google公用DNS(8.8.8.8)或ISP为您提供的DNS)。