Я запускаю различные приложения на моем производственном сервере внутри док-контейнеров. Допустим, я хочу, чтобы безопасность SSL / TSL была только для моего jenkins-сервера, работающего внутри одного из док-контейнеров;Для реализации этого я использую nginx-reverse-proxy и Let's Encrypt CA.
Имейте в виду:
- SSL зарегистрированный хост DNS / имя_сервера: www.example.com
- Мой сервер jenkins работает на порт 8080 (открыт) внутри докера с conatiner и именем хоста: jenkinsserver
- Я использую nginx и jenkinserver в одной сети, скажем, jen-network
- Контейнер nginxserver связан с jenkinsserver контейнер через external_link.
docker-compose.yml для nginx:
version: '3'
services:
nginxserver:
image: nginx:latest
container_name: nginxserver
hostname: nginxserver
restart: always
ports:
- 8888:553
volumes:
- ./conf.d:/etc/nginx/conf.d
- dockervolumes/var/log/nginx/:/var/log/nginx/
- /path/to/letsencrypt/www.example.com/fullchain.pem:/etc/ssl/private/fullchain.pem
- /path/to/letsencrypt/www.example.com/privkey.pem:/etc/ssl/private/privkey.pem
networks:
- jen-network
external_links:
- 'jenkinsserver:jenkinsserver'
networks:
jen-network:
external : true
nginx.conf:
upstream jenkins {
server jenkinsserver:8080;
}
server {
listen 553 ssl default_server;
server_name www.exapmle.com;
error_log /var/log/nginx/error.log warn;
access_log /var/log/nginx/access.log main;
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;
add_header X-Frame-Options SAMEORIGIN;
add_header X-Content-Type-Options nosniff;
add_header X-XSS-Protection "1; mode=block";
#ssl
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ecdh_curve secp384r1;
ssl_ciphers "ECDHE-RSA-AES256-GCM-SHA512:DHE-RSA-AES256-GCM-SHA512:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-SHA384 OLD_TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305_SHA256 OLD_TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256";
ssl_prefer_server_ciphers on;
ssl_dhparam /etc/nginx/dhparam-4096.pem;
ssl_certificate /etc/ssl/private/fullchain.pem;
ssl_certificate_key /etc/ssl/private/privkey.pem;
ssl_session_timeout 10m;
ssl_session_cache shared:SSL:10m;
ssl_session_tickets off;
ssl_stapling on;
ssl_stapling_verify on;
location / {
proxy_pass http://jenkins;
proxy_redirect http://jenkins $scheme://example.com;
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;
}
ПРОБЛЕМА ЗАКЛЮЧЕНА:
все HTTP-запросы перенаправляются на HTTPS;из-за этого я не могу просматривать другие приложения, работающие на других портах (кроме 8888) в моем браузере.
Например:
http://www.example.com:8888 перенаправляется на http s : //www.example.com: 8888 и я могу получить доступ к своему интерфейсу Дженкинса.
Но http://www.example.com:9090 также перенаправляются на http s : //www.example.com: 9090 , но я не хочу, чтобы это произошло.
Если вы нашли решение, пожалуйста, дайте мне знать. Также попробуйте объяснить, что я делаю не так.