【发布时间】:2018-07-11 13:57:53
【问题描述】:
我有一个在 docker 中运行的烧瓶应用程序,并使用 Let's Encrypt 设置 nginx。我已将 proxy_set_header X-Forwarded-Proto $scheme; 添加到我的 nginx 配置中,但 url_for 仍然返回 http url 而不是 https url。但是这个问题只有在docker中运行时才会出现。
这是我的 nginx 配置:
server {
listen 443 ssl default_server;
ssl_certificate /etc/letsencrypt/live/markote.app/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/markote.app/privkey.pem;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_prefer_server_ciphers on;
ssl_ciphers 'EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH';
location / {
proxy_pass http://127.0.0.1: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;
proxy_set_header X-Forwarded-Proto $scheme;
}
}
还有我的 docker 文件:
FROM python:3.6-slim
WORKDIR /app
ADD . /app
RUN apt update
RUN apt install -y curl sudo gnupg libcairo2-dev
RUN pip install gunicorn
RUN curl -sL https://deb.nodesource.com/setup_8.x | sudo -E bash -
RUN sudo apt-get install -y nodejs
RUN python setup.py install
RUN npm install
RUN npm run build
EXPOSE 5000
CMD [ "gunicorn", "-c", "gunicorn.py", "wsgi:app" ]
如果我运行gunicorn -c gunicorn.py wsgi:app & 而不是sudo docker run -d -p 5000:5000 my/repo,url_for 可以成功生成https。我错过了什么吗?
【问题讨论】: