SSL 핸드셰이크 오류로 인해 nginx 역방향 프록시 뒤의 웹 서버에 대한 외부 액세스가 실패함

SSL 핸드셰이크 오류로 인해 nginx 역방향 프록시 뒤의 웹 서버에 대한 외부 액세스가 실패함

공용 Nginx 역방향 프록시 서버 뒤에 많은 Apache 웹 서버가 있는 설정이 있습니다. 하지만 인터넷에서 웹 서버에 접근할 수 없습니다. 로컬 네트워크에서 액세스가 제대로 작동하므로 Apache 설정이 올바른지 의심됩니다. 하지만 인터넷에 연결하려고 하면 Nginx 서버에서 하나, Apache 서버에서 하나, 두 가지 오류 메시지가 발생하기 때문에 100% 확실하지는 않습니다.

Nginx 서버는 다음 오류를 보고합니다. "ssl_certificate는 SSL 핸드셰이크 중에 SSL 포트를 수신하는 서버에 정의되어 있지 않습니다." Apache 웹 서버는 다음 오류를 표시합니다. "authz_core 오류... AH01630 클라이언트가 서버 구성에 의해 거부되었습니다."

Nginx 역방향 프록시 서버의 구성은 두 개의 파일(HTTP 트래픽용 파일과 HTTPS용 파일)로 나뉩니다.

<example_dk_80.conf>:
server {
    listen 80;
    server_name example.dk www.example.dk;
    return      301 https://$server_name$request_uri;
}

<example_dk_443.conf>:
server {
    listen 443 ssl http2;
    server_name example.dk www.example.dk;

    add_header Strict-Transport-Security "max-age=31536000";

    ssl on;
    ssl_certificate         /etc/ssl/certs/example_dk.crt;
    ssl_certificate_key     /etc/ssl/private/example_dk.key;
    ssl_trusted_certificate /etc/ssl/certs/example_dk.ca-bundle;
    ssl_protocols           TLSv1.1 TLSv1.2;
    ssl_prefer_server_ciphers on;
    ssl_ciphers             HIGH:!aNULL:!MD5;
    ssl_session_cache shared:SSL:10m;
    ssl_session_tickets off;
    ssl_stapling on;
    ssl_stapling_verify on;

    resolver 172.16.1.10 8.8.8.8 8.8.4.4 valid=300s;
    resolver_timeout 5s;

    location /.well-known {
       alias /var/www/example_dk/.well-known;
    }
    location / {
        proxy_pass http://172.16.1.51:443;
        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;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $remote_addr;
        proxy_set_header X-Forwarded-Proto $scheme;
    }
}

내 Apache 웹 서버(WordPress 포함)는 다음과 같이 구성됩니다.

<vhost.conf>:
DirectoryIndex index.php index.html

<VirtualHost *:80>
  ServerName example.dk
  ServerAlias www.example.dk
  DocumentRoot "/var/www/example_dk"

  <Directory "/var/www/example_dk">
    AllowOverride All
    Options Indexes FollowSymLinks MultiViews
    AllowOverride All
    Require all granted
  </Directory>
</VirtualHost>

<VirtualHost *:443>
  ServerName example.dk
  ServerAlias www.example.dk
  DocumentRoot "/var/www/example_dk"

  SSLEngine on
  SSLCipherSuite AES256+EECDH:AES256+EDH
  SSLProtocol All -SSLv2 -SSLv3
  SSLHonorCipherOrder On
  SSLCompression off
  SSLCertificateFile /etc/ssl/certs/example_dk.crt
  SSLCertificateKeyFile /etc/ssl/private/example_dk.key
  SSLCertificateChainFile /etc/ssl/certs/example_dk.ca-bundle

  <Directory "/var/www/example_dk">
    AllowOverride None
    Options Indexes FollowSymLinks MultiViews
    Require all granted
  </Directory>
</VirtualHost>

이것이 어떤 차이가 있는지는 모르겠지만 WordPress 설치용 htaccess 파일은 다음과 같습니다.

<.htaccess>:
# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
# END WordPress

## Security
<Files xmlrpc.php>
Require all denied
</Files>

<Files wp-config.php>
Require all denied
</Files>

Options -Indexes

## SSL
#Header set Strict-Transport-Security "max-age=31536000" env=HTTPS

## Force www
RewriteEngine on
RewriteCond %{HTTP_HOST} ^example.dk [NC]
RewriteRule ^(.*)$ http://www.example.dk/$1 [L,R=301,NC]

## Force https
RewriteEngine On
RewriteCond %{HTTP:X-Forwarded-Proto} !https
RewriteRule ^(.*)$ https://%{HTTP_HOST}/$1 [R=301,L]

내 모든 서버는 Ubuntu 18.04를 실행합니다.

답변1

   proxy_pass http://172.16.1.51:443;

지정된 프로토콜은 http://nginx에게 일반 HTTP를 사용하여 포트 443의 서버에 액세스하도록 지시합니다. 이 포트의 서버가 HTTPS로 구성되어 있으면 실패합니다. 대신, https://포트 443에서 HTTPS를 사용하여 서버에 액세스하거나 http://(기본) 포트 80을 사용하여 순수 HTTP에 필요한 포트에서 순수 HTTP를 사용하여 서버에 액세스하도록 프로토콜을 지정해야 합니다 .

관련 정보