У меня есть nginx, выступающий в качестве обратного прокси для сервера Glassfish с ssl, обслуживающий три контекста glassfish, один демонстрационный сайт, один сервер администрирования jenkins и один сервер администратора Glassfish. Root перенаправляется на демонстрационный сайт. Http перенаправляется на https, nginx выполняет разгрузку ssl. Все работает отлично, за исключением двух проблем:
2015/11/19 08:27:13 [error] 12656#0: *2 open() "/usr/share/nginx/html/resource/community-theme/images/login-product_name_open.png" failed (2: No such file or directory), client: <ip-address>, server: demo.domain.nl, request: "GET /resource/community-theme/images/login-product_name_open.png HTTP/1.1", host: "demo.domain.nl", referrer: "https://demo.domain.nl/admin/"
Любая помощь очень ценится! Ниже вы можете найти мою конфигурацию nginx:
server {
listen 80;
listen [::]:80;
server_name demo.domain.nl;
return 301 https://$server_name$request_uri;
}
server {
listen 443 default ssl;
server_name demo.domain.nl;
client_max_body_size 5M;
ssl on;
ssl_certificate conf.d/ssl/demo.domain.nl.crt;
ssl_certificate_key conf.d/ssl/demo.domain.nl.key;
ssl_protocols SSLv3 TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers RC4:HIGH:!aNULL:!MD5;
ssl_prefer_server_ciphers on;
keepalive_timeout 60;
ssl_session_cache shared:SSL:10m;
ssl_session_timeout 10m;
access_log /var/log/nginx/demo.https.access_log;
error_log /var/log/nginx/demo.https.error_log;
rewrite_log on;
location = / {
rewrite ^ /demo/ last;
}
location /demo/ {
proxy_pass http://localhost:8080/demo/;
proxy_next_upstream error timeout invalid_header http_500 http_502 http_503 http_504;
proxy_set_header Accept-Encoding "";
proxy_set_header Host $host;
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;
add_header Front-End-Https on;
proxy_redirect off;
}
location /jenkins/ {
proxy_pass http://localhost:8080/jenkins/;
proxy_next_upstream error timeout invalid_header http_500 http_502 http_503 http_504;
proxy_set_header Accept-Encoding "";
proxy_set_header Host $host;
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;
add_header Front-End-Https on;
proxy_redirect off;
}
location /admin/ {
proxy_pass https://localhost:4848/;
proxy_redirect https://localhost:4848 https://demo.domain.nl/admin;
proxy_next_upstream error timeout invalid_header http_500 http_502 http_503 http_504;
proxy_set_header Accept-Encoding "";
proxy_set_header Host $host;
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;
add_header Front-End-Https on;
}
}
У меня было много проблем с тем, чтобы консоль администратора GF4.1 нормально работала с обратным прокси-сервером Nginx, поэтому оставьте это здесь на случай, если кто-нибудь придет.
Большая проблема не в том, чтобы заставить его работать, но в том, что веб-приложение GlassFish использует множество запросов XMLHttpRequest, которые усложняют жизнь. См. Рабочую конфигурацию ниже. Я слушал 8484 как своего рода "сокрытие" консоли, но вы можете слушать что-нибудь еще, должно работать нормально. Обратите внимание, что вам могут не понадобиться все эти настройки, чтобы просто заставить его работать. У нас были довольно строгие требования к шифрам и т. Д., Но это даст вам рейтинг A + по ssllabs
server {
listen 8484;
server_name yourdomain.com;
ssl on;
ssl_certificate /path/to/linked.crt;
ssl_certificate_key /path/to/keyfile.key;
ssl_session_cache shared:SSL:50m;
ssl_session_timeout 5m;
client_max_body_size 4G;
ssl_protocols TLSv1.1 TLSv1.2;
ssl_prefer_server_ciphers On;
ssl_ciphers 'kEECDH+ECDSA+AES128 kEECDH+ECDSA+AES256 kEECDH+AES128 kEECDH+AES256 kEDH+AES128 kEDH+AES256 !DES-CBC3-SHA +SHA !aNULL !eNULL !LOW !kECDH !DSS !MD5 !EXP !PSK !SRP !CAMELLIA !SEED';
ssl_dhparam /etc/nginx/ssl/dhparam2048.pem; #NB generate custom dhparam for logjam as follows: openssl dhparam -out dhparams.pem 2048
add_header Strict-Transport-Security 'max-age=31536000; includeSubDomains;';
ssl_stapling on;
access_log /var/log/nginx/nginx-access.log;
error_log /var/log/nginx/nginx-error.log;
location / {
proxy_connect_timeout 300;
proxy_send_timeout 300;
proxy_read_timeout 300;
send_timeout 300;
proxy_pass_request_headers on;
proxy_no_cache $cookie_nocache $arg_nocache$arg_comment;
proxy_no_cache $http_pragma $http_authorization;
proxy_cache_bypass $cookie_nocache $arg_nocache $arg_comment;
proxy_cache_bypass $http_pragma $http_authorization;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header Host $host:$server_port; #Very nb to add :$server_port here
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
add_header Access-Control-Allow-Origin *;
proxy_set_header Access-Control-Allow-Origin *;
proxy_redirect /web/ https://yourdomain.com:8484/web/; #silly Xmlhttprequests
proxy_pass https://127.0.0.1:4848;
# proxy_ssl_verify off; #include this is using Nginx > 1.8
}
}