uwsgi 缺少 https 获取套接字选项

问题描述 投票:0回答:1

我正在使用 uwsgi 在 Docker 上运行 Flask 应用程序。 我已经运行它很多年了,但我们需要向它添加 https。 我知道我可以使用 HAProxy 并执行 ssl 卸载,但在我们当前的设置中,我们不能这样做,至少现在不能。 我们需要直接在应用程序上执行 SSL。 我尝试了多个选项,但不断收到“-s/--socket 选项丢失且 stdin 不是套接字”的信息。 不知道还能尝试什么。 服务器是uWSGI==2.0.26。 请帮忙。 下面是我的 uwsgi.ini 文件。

[uwsgi]

module = wsgi:app
master = true
processes = 5
enable-threads = true
single-interpreter = true

buffer-size = 32768

# protocol = http
# socket = 0.0.0.0:5000
# protocol = https
shared-socket = 0.0.0.0:5000
https = 0,/app/ssl/app_cert.crt,/app/ssl/app_cert.key

stdout_logfile = /dev/stdout
stdout_logfile_maxbytes = 0

stderr_logfile = /dev/stdout
stderr_logfile_maxbytes = 0

chmod-socket = 660
vacuum = true

die-on-term = true

py-autoreload = 1
python flask uwsgi dockerpy
1个回答
0
投票

您可以使用以下示例来使用

flask
运行您的
uwsgi
应用程序。我将提供带有
docker
的示例,以方便重现。

uwsgi
conf 是从docs 中提取的。

uwsgi.ini

[uwsgi]
shared-socket = 0.0.0.0:443
https = =0,ssl/server.crt,ssl/server.key
master = true
module = app:app
uid = uwsgi
gid = uwsgi

app.py

from flask import Flask

app = Flask(__name__)

@app.route("/")
def hello():
    return "Hello, World!"

if __name__ == "__main__":
    app.run() 

requirements.txt

Flask
uWSGI==2.0.26

Dockerfile

FROM python:3.10-slim

RUN apt-get update && apt-get install -y \
    build-essential \
    gcc \
    libssl-dev \
    && apt-get clean \
    && rm -rf /var/lib/apt/lists/*

RUN groupadd -r uwsgi && useradd -r -g uwsgi -m uwsgi

WORKDIR /app

COPY requirements.txt /app/

RUN pip install --no-cache-dir -r requirements.txt

COPY . /app/

COPY ssl/ /app/ssl/

RUN chown -R uwsgi:uwsgi /app

EXPOSE 443

USER uwsgi

CMD ["uwsgi", "--ini", "uwsgi.ini"]

创建

ssl
目录并生成自签名证书。

mkdir ssl
openssl req -x509 \
  -newkey rsa:2048 \
  -keyout ssl/server.key \
  -out ssl/server.crt \
  -days 365 -nodes -subj "/CN=localhost"

现在你应该有这个文件夹结构:

.
├── app.py
├── Dockerfile
├── requirements.txt
├── ssl
│   ├── server.crt
│   └── server.key
└── uwsgi.ini

现在构建并运行:

docker build -t flask-uwsgi-example .
docker run --rm --name flask -p 443:443 flask-uwsgi-example

并用curl进行测试:

$ curl -k https://localhost:443
Hello, World!
© www.soinside.com 2019 - 2024. All rights reserved.