質問: @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; } }
回答: devpiはnginxについて何も知りません、それはhttpトラフィックを提供するだけです。代わりにhttps経由でwebアプリとやり取りする場合、クライアントとして、それを処理できるフロントエンド(nginx)と通信する必要があります。フロントエンドは、webアプリと通信します。 nginxのこのアプリケーションは、 リバースプロキシ として知られています。リバースプロキシとして、webアプリ自体に静的ファイルを提供するよりも効率的に静的ファイルを提供するnginxの機能の恩恵を受けることもできます(したがって、「提供を試みる...」ロケーションブロック)。これは私がdevpiに使用する完全に機能するnginx構成です。これは、composeを使用してdockerでnginxとdevpiを実行しているため、あなたのようなドメイン構成ではなく/etc/nginx/nginx.confファイルであることに注意してください。ただし、必要なものを引き出すことができるはずです。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とhttp://localhost:8080で実行されているdevpiを使用すると、https://localhostにアクセスできるか、適切なdns https://example.co.ukを使用してマシンにアクセスできるはずです。リクエストは次のようになります。client (https) > nginx (http) > devpi (http) > nginx (https) > client これは、devpi startがそれ以上のことを知らないため、nginxが自分で実行されていることを確認する必要があることも意味します。少なくともnginxのウェルカムページが表示されます。