すぐに使用できる devpi-serverhttp://
で実行しています。
代わりにhttps://
で動作させる必要があります。
私はすでにドメインの証明書を持っています。
Nginx-site-configの devpiドキュメント に従い、証明書を指す/etc/nginx/conf.d/domain.conf
ブロックを持つserver{}
ファイルを作成しました(以下の抜粋)。
ただし、私のdevpi-server --start --init
はすべてのnginx構成を完全に無視しています。
Devpi-serverにnginx構成を使用するように指示するにはどうすればよいですか?それも可能ですか、それとも私は完全に要点を見逃していますか?
/etc/nginx/conf.d/domain.conf
ファイルの内容:
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;
}
}
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のウェルカムページが表示されます。