Beliebt

Wie kann man devpi mit https bedienen? - ssl, nginx, https, tls

Ich habe eine Out-of-the-Box devpi-server l├Ąuft weiter http://.

Ich muss es zum Arbeiten bringen https:// stattdessen.

Ich habe bereits die Zertifikate f├╝r die Domain.

Ich folgte dem devpi Dokumentation f├╝r Nginx-Site-Config, und erstellt die /etc/nginx/conf.d/domain.conf Datei, die die hat server{} Block, der auf meine Zertifikate verweist (Auszug unten).

Allerdings ist mein devpi-server --start --init ignoriert jegliche / alle Nginx-Konfigurationen vollst├Ąndig.

Wie weise ich den devpi-Server an, die Nginx-Konfigurationen zu verwenden? Ist es ├╝berhaupt m├Âglich, oder verpasse ich den Punkt v├Âllig?

/etc/nginx/conf.d/domain.conf Dateiinhalt:

server {
server_name localhost $hostname "";

listen              8081 ssl default_server;
listen              [::]:8081 ssl default_server;
server_name         domain;
ssl_certificate     /root/certs/domain/domain.crt;
ssl_certificate_key /root/certs/domain/domain.key;
ssl_protocols       TLSv1.1 TLSv1.2;
ssl_ciphers         EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH;

gzip             on;
gzip_min_length  2000;
gzip_proxied     any;
gzip_types       application/json;

proxy_read_timeout 60s;
client_max_body_size 64M;

# set to where your devpi-server state is on the filesystem
root /root/.devpi/server;

# try serving static files directly
location ~ /+f/ {
# workaround to pass non-GET/HEAD requests through to the named location below
error_page 418 = @proxy_to_app;
if ($request_method !~ (GET)|(HEAD)) {
return 418;
}

expires max;
try_files /+files$uri @proxy_to_app;
}
# try serving docs directly
location ~ /+doc/ {
try_files $uri @proxy_to_app;
}
location / {
# workaround to pass all requests to / through to the named location below
error_page 418 = @proxy_to_app;
return 418;
}
location @proxy_to_app {
proxy_pass https://localhost:8081;
proxy_set_header X-outside-url $scheme://$host:$server_port;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-Proto https;
}
}

Antworten:

1 f├╝r Antwort Ôäľ 1

Devpi wei├č nichts ├╝ber Nginx, es wirddienen nur HTTP-Verkehr. Wenn wir stattdessen ├╝ber HTTPS mit einer Web-App interagieren m├Âchten, m├╝ssen wir als Client mit einem Front-End (Nginx) sprechen, das mit unserer Web-App kommuniziert. Diese Anwendung von Nginx ist als bekannt Reverse Proxy. Als Reverse Proxy k├Ânnen wir auch von der F├Ąhigkeit von Nginx profitieren, statische Dateien effizienter bereitzustellen, als wenn unsere Web-App dies selbst erledigt "versuch zu dienen ..." Standortbl├Âcke).

Hier ist eine vollst├Ąndige funktionierende Nginx-Konfiguration, die ich f├╝r devpi verwende. Beachten Sie, dass dies ist /etc/nginx/nginx.conf datei anstatt einer domainkonfiguration wie deiner, weil ich nginx und devpi im docker mit compose laufen lasse, aber du solltest in der lage sein herauszufinden was du brauchst:

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;
}
}
}

Wenn Nginx diese Konfiguration verwendet und devpi ausgef├╝hrt wird http://localhost:8080sollten Sie zugreifen k├Ânnen https://localhost oder mit Ihrem Rechner mit entsprechendem DNS https://example.co.uk. Eine Anfrage wird sein:

client (HTTPS) > Nginx (HTTP) > devpi (HTTP) > Nginx (HTTPS) > client

Dies bedeutet auch, dass Sie sicherstellen m├╝ssen, dass Nginx selbst ausgef├╝hrt wird, da devpi start es nicht besser wei├č. Sie sollten zumindest eine Nginx-Begr├╝├čungsseite sehen.