web-dev-qa-db-ja.com

複数のドメインとホストを持つリバースプロキシとしてのnginx

この質問はおそらく何度か聞かれましたが、私が見つけることができるすべての結果と私の知識がほとんどないので、私はちょっと迷っています。私はFedora29を使用しています。

私がnginxでやろうとしていること:

  • 複数のドメイン名でssl証明書を暗号化しましょう
  • 各ドメインを特定の内部ホストにマップします(構成ファイル内のDNSまたはIP、私は気にしません、何が機能するか)
  • すべてのホストはすでに内部でsslを使用しています(httpは利用できません-いくつかのリスニングポート)
  • 外部からhttpを使用する場合は、httpsにリダイレクトしたいと思います。

サンプル :

どうすればそれができますか? nginx設定を自動的に暗号化してみましょうが、少し多すぎるようです。


答えてくれてありがとう、今は仕事をしていなくても、ある程度は進歩していると感じています。 「502 Bad Gateway」エラーが発生したため、ここにすべての設定ファイルを投稿します。 IPはリバースプロキシと同じサブネットにはありませんが、完全にアクセス可能であり、ファイアウォールやルーティングの問題はありません。

前進するためにどこに目を向けることができるか考えていますか?元の構成には、暗号とプロトコルを含むcertbotconfファイルもあります。多分私はそれを再び含める必要がありますか?

また、アクセスしようとしている内部サーバーには、自分のAD CSで署名された証明書がありますが、リバースプロキシにルート証明書がインストールされていません。多分私はすべきですか?

# For more information on configuration, see:
#   * Official English Documentation: http://nginx.org/en/docs/
#   * Official Russian Documentation: http://nginx.org/ru/docs/

user nginx;
worker_processes auto;
error_log /var/log/nginx/error.log;
pid /run/nginx.pid;

# Load dynamic modules. See /usr/share/doc/nginx/README.dynamic.
include /usr/share/nginx/modules/*.conf;

events {
    worker_connections 1024;
}

http {
    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';

    access_log  /var/log/nginx/access.log  main;

    sendfile            on;
    tcp_nopush          on;
    tcp_nodelay         on;
    keepalive_timeout   65;
    types_hash_max_size 4096;

    include             /etc/nginx/mime.types;
    default_type        application/octet-stream;

    # Load modular configuration files from the /etc/nginx/conf.d directory.
    # See http://nginx.org/en/docs/ngx_core_module.html#include
    # for more information.
    include /etc/nginx/conf.d/*.conf;

    server {
        listen 80;
        server_name  _;
        return 301 https://$Host$request_uri;
    }

    server {
        listen  443 ssl;
        server_name scans.domain.com;
        ssl  on;
        ssl_certificate /etc/letsencrypt/live/www.domain.com/fullchain.pem; # managed by Certbot
        ssl_certificate_key /etc/letsencrypt/live/www.domain.com/privkey.pem; # managed by Certbot

        location  / {
                proxy_pass  https://192.168.XX.YY/;
        }
    }
}
1
EHRETic

NGINXに複数のドメイン名を独立したプロキシに解決させるには、使用しているドメインごとにサーバーブロックをセットアップする必要があります(そうです、LEが提供するincludeが必要です)。

server { listen 443 ssl; server_name application.domain.com; ssl on; ssl_certificate /etc/letsencrypt/live/www.domain.com/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/www.domain.com/privkey.pem; include /etc/letsencrypt/options-ssl-nginx.conf; location / { proxy_pass https://hostname1.domain.local:80/; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection 'upgrade'; proxy_set_header Host $Host; proxy_cache_bypass $http_upgrade; } } server { listen 443 ssl; server_name test.domain.com; ssl on; ssl_certificate /etc/letsencrypt/live/www.domain.com/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/www.domain.com/privkey.pem; include /etc/letsencrypt/options-ssl-nginx.conf; location / { proxy_pass https://hostname3.domain.local:80/; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection 'upgrade'; proxy_set_header Host $Host; proxy_cache_bypass $http_upgrade; } } server { listen 443 ssl; server_name www.domain.com; ssl on; ssl_certificate /etc/letsencrypt/live/www.domain.com/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/www.domain.com/privkey.pem; include /etc/letsencrypt/options-ssl-nginx.conf; location / { proxy_pass https://hostname2.domain.local:1234/; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection 'upgrade'; proxy_set_header Host $Host; proxy_cache_bypass $http_upgrade; } }

1
Hob

http.conf構成で、ポート80に着信するすべてのトラフィックを転送するようにリダイレクトするルールを指定できます(ドメインに依存しません):server { listen 80; server_name _; return 301 https://$Host$request_uri; }

https> httpを転送しようとしている場合は、リバースプロキシ構成も必要になります。次のように機能します。

server { listen 443 ssl; server_name application.domain.com; ssl on; ssl_certificate /etc/ssl/public/application.domain.com.combined; ssl_certificate_key /etc/ssl/private/application.domain.com.key; location / { proxy_pass http://hostname1.domain.local:80/; } }

各Webサイトを異なるポートに配置する必要はないことに注意してください。nginxはドメイン名に基づいてクライアントに提供するコンテンツを認識しています。

よろしく、

1
Dmitriy Kupch