Flask,Gunicorn,NGINX,Docker:配置SERVER_NAME和proxy_pass的方式是什么?

时间:2017-06-16 03:35:34

标签: nginx docker flask gunicorn

我使用 Flask gunicorn NGINX Docker 设置了docker项目,如果我没有在Flask的setting.py。

中添加 SERVER_NAME

当前配置为:

gunicorn

gunicorn -b 0.0.0.0:5000

搬运工-compose.yml

services:
  application:
    #restart: always
    build: .    
    expose:
     - "5000"
    ports:
     - "5000:5000"
    volumes:
     - .:/code
    links:
     - db
  nginx:
    restart: always
    build: ./nginx
    links:
      - application
    expose:
      - 8080
    ports:
      - "8880:8080"

NGINX .conf

server {

    listen 8080;
    server_name application;
    charset utf-8;

    location / {
        proxy_pass http://application:5000;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }
}

然后我在Flask的setting.py

中设置 SERVER_NAME
SERVER_NAME = '0.0.0.0:5000'

当我将url 0.0.0.0:8880 输入浏览器时,我会从nginx获得404响应。在Flask的setting.py?

中应该正确 SERVER_NAME

提前致谢。

2 个答案:

答案 0 :(得分:1)

最后找到解决方案, 我必须使用 proxy_set_header

的特定端口
proxy_set_header Host $host:5000;

答案 1 :(得分:0)

为SERVER_NAME设置IP没有意义。 SERVER_NAME会将请求重定向到该主机名,这对于设置子域以及支持使用应用程序上下文生成URL非常有用(例如,假设您有一个后台线程,需要生成URL但没有请求上下文)。

SERVER_NAME应与您部署应用程序的域匹配。