У меня есть следующие настройки (все машины работают под CentOS8):
- publi c rooter, который перенаправляет запросы HTTP и HTTPS на мой NGINX компьютер (IP: 192.168.100.2) - давайте назовем это прокси-машиной;
- машина App1 (зарегистрированная как app1.domain.com) с IP 192.168.100.10, работающая на Tomcat8, которая обслуживается NGINX с перенаправлением HTTPS
- App2 компьютер (зарегистрированный как app2.domain.com) с IP 192.168.100.20, работающий на WildFly15, также обслуживаемый NGINX с перенаправлением HTTPS
У меня есть следующие настройки NGINX (блок сервера)
Прокси-машина (192.168.100.2):
# APP1 settings
server {
listen *:80;
server_name app1.domain.com;
return 301 https://$server_name$request_uri;
}
server {
listen *:443 ssl http2;
server_name app1.domain.com;
ssl on;
ssl_certificate /etc/nginx/ssl/app1/nginx.crt;
ssl_certificate_key /etc/nginx/ssl/app1/nginx.key;
ssl_dhparam /etc/nginx/ssl/app1/dhparam.pem;
proxy_ssl_session_reuse off;
location ~ ^/(.*)$ {
proxy_pass http://192.168.100.10/$1$is_args$args;
proxy_set_header Host app1.domain.com;
proxy_set_header X-Real_IP $remote_addr;
}
}
# APP2 settings
server {
listen *:80;
server_name app2.domain.com;
return 301 https://$server_name$request_uri;
}
server {
listen *:443 ssl http2;
server_name app2.domain.com;
ssl on;
ssl_certificate /etc/nginx/ssl/app2/nginx.crt;
ssl_certificate_key /etc/nginx/ssl/app2/nginx.key;
ssl_dhparam /etc/nginx/ssl/app2/dhparam.pem;
proxy_ssl_session_reuse off;
location ~ ^/(.*)$ {
proxy_pass http://192.168.100.20/$1$is_args$args;
proxy_set_header Host app2.domain.com;
proxy_set_header X-Real_IP $remote_addr;
}
}
Настройки аппарата App1 (настройки App2 аналогичны):
server {
listen 192.168.100.2:80 default_server;
listen [::]:80 default_server;
server_name app1.domain.com;
return 301 https://$server_name$request_uri;
}
server {
listen 192.168.100.2:443 ssl http2 default_server;
listen [::]:443 ssl http2 default_server;
server_name app1.domain.com;
ssl_certificate "/etc/nginx/ssl/nginx.crt";
ssl_certificate_key "/etc/nginx/ssl/nginx.key";
ssl_dhparam "/etc/nginx/ssl/dhparam.pem";
ssl_session_cache shared:SSL:20m;
ssl_session_timeout 180m;
ssl_protocols TLSv1.2 TLSv1.3;
ssl_prefer_server_ciphers on;
ssl_ciphers ECDH+AESGCM:ECDH+AES256:ECDH+AES128:DHE+AES128:!ADH:!AECDH:!MD5;
add_header Strict-Transport-Security max-age=63072000 always;
# aditional security settings
set $allowOriginSite *;
proxy_pass_request_headers on;
proxy_pass_header Set-Cookie;
client_max_body_size 0;
server_tokens off;
location / {
root /opt/tomcat8/webapps/app1/;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header Host $http_host;
proxy_http_version 1.1;
proxy_pass http://127.0.0.1:8080/app1/;
proxy_redirect http:// https://;
}
}
При использовании этой конфигурации при доступе к https://app1.domain.com я получил ошибку «502 Bad Gateway» в Firefox и ошибку «NET :: ERR_CERT_INVALID» в Google Chrome.
Чтобы преодолеть это, я остановил NGINX на двух компьютерах приложений и перенес сервер ettings из каждого nginx .conf файла на прокси-машину (192.168.100.2) nginx .conf.
Я действительно предпочитаю, чтобы "local" NGINX был запущен и работал (мне также нужен HTTPS для работы на локальная сеть).