Это ответ, который я дал на тот же вопрос на superuser .
Devpi ничего не знает о Nginx, он будет обслуживать только HTTP-трафик. Когда вместо этого мы хотим взаимодействовать с веб-приложением через HTTPS, нам, как клиенту, необходимо общаться с внешним интерфейсом, который может его обработать (Nginx), который, в свою очередь, будет взаимодействовать с нашим веб-приложением. Это приложение Nginx известно как обратный прокси . В качестве обратного прокси-сервера мы также можем извлечь выгоду из способности Nginx более эффективно обслуживать статические файлы, чем заставлять наше веб-приложение делать это самостоятельно (отсюда «попробуйте обслуживать ...» блоки размещения).
Вот полный рабочий конфиг Nginx, который я использую для devpi. Обратите внимание, что это /etc/nginx/nginx.conf
файл, а не конфигурация домена, как у вас, потому что я запускаю Nginx и Devpi в докере с compose, но вы сможете извлечь то, что вам нужно:
worker_processes 1;
events {
worker_connections 1024;
}
http {
# Define the location for devpi
upstream pypi-backend {
server localhost:8080;
}
# Redirect HTTP to HTTPS
server {
listen 80;
listen [::]:80;
server_name _;
return 301 https://$host$request_uri;
}
server {
listen 443 ssl;
server_name example.co.uk; # This is the accessing address eg. https://example.co.uk
root /devpi/server; # This is where your devpi server directory is
gzip on;
gzip_min_length 2000;
gzip_proxied any;
proxy_read_timeout 60s;
client_max_body_size 64M;
ssl_certificate /etc/nginx/certs/cert.crt; Path to certificate
ssl_certificate_key /etc/nginx/certs/cert.key; Path to certificate key
ssl_session_cache builtin:1000 shared:SSL:10m;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers HIGH:!aNULL:!eNULL:!EXPORT:!CAMELLIA:!DES:!MD5:!PSK:!RC4;
ssl_prefer_server_ciphers on;
access_log /var/log/nginx/pypi.access.log;
# try serving static files directly
location ~ /\+f/ {
error_page 418 = @pypi_backend;
if ($request_method !~ (GET)|(HEAD)) {
return 418;
}
expires max;
try_files /+files$uri @pypi_backend;
}
# try serving docs directly
location ~ /\+doc/ {
try_files $uri @pypi_backend;
}
location / {
error_page 418 = @pypi_backend;
return 418;
}
location @pypi_backend {
proxy_pass http://pypi-backend; # Using the upstream definition
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-outside-url $scheme://$host:$server_port;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Host $server_name;
}
}
}
Если Nginx использует эту конфигурацию и devpi работает на http://localhost:8080
, вы сможете получить доступ к https://localhost
или к вашей машине с соответствующим DNS https://example.co.uk
. Запрос будет:
client (HTTPS) > Nginx (HTTP) > devpi (HTTP) > Nginx (HTTPS) > client
Это также означает, что вам нужно убедиться, что Nginx работает самостоятельно, так как devpi start не будет знать лучше. По крайней мере, вы должны увидеть страницу приветствия Nginx.