У меня есть официальный образ Nginx, в который я добавил сертификаты и файл .conf
, чтобы он слушал через порты 443 и 80. Я только что добавил в официальный dockerfile Nginx:
ADD gp-search2.conf /etc/nginx/conf.d/
ADD STAR.GREY.COM.crt /etc/ssl/certs/
ADD wildcard_grey.com.key /etc/ssl/certs/
Я используюКонтейнер Azure устанавливает, и я успешно создаю контейнер с этой командой
az container create --resource-group RG --name nginx --image xxxxx.azurecr.io/api-s:nginx4 --cpu 1 --memory 1.5 --registry-username xxxxxx --registry-password xxxxxxxxxx --ip-address public --ports 443 --dns-name-label prod3
. После этого я успешно создаю контейнер на Azure с открытым IP-адресом и полным доменным именем, которое я предоставил prod3eastus.azurecontainer.io
.Также я создаю в Dynect.net новый узел для имеющегося у нас домена: newcontainer.example.com
и добавляю туда общедоступный IP-адрес нового контейнера, чтобы действительные сертификаты, имеющиеся у меня в контейнере, соответствовали домену.
Если я получаю доступ к контейнеру с общедоступным полным доменным именем или IP-адресом, который предоставляет Azure, я могу получить доступ нормально, но если я пытаюсь получить доступ по HTTPS, я получаю:
Эта страница не 't работает Если проблема не устранена, обратитесь к владельцу сайта.ОШИБКА HTTP 400
и
* ПРЕДУПРЕЖДЕНИЕ: невозможно проверить newcontainer.example.com сертификат, выданный 'CN =Network Solutions OV Server CA 2, O = Network Solutions LLC, L = Херндон, ST = VA, C = US ': невозможно локально проверить полномочия эмитента. *
Даже если это:
- сертификаты действительны
- сертификаты находятся на том же пути, который я указал на
file.conf
в контейнере Nginx (если не контейнер не будет запущен).
Это файл .conf
, который у меня есть:
upstream searchapl {
server 40.x.x.x:8080 fail_timeout=0;
}
server {
listen 80;
server_name _;
return 301 https://$host$request_uri;
}
server {
listen 443 ssl;
server_name _;
#status_zone go-backend-servers;
ssl_certificate /etc/ssl/certs/STAR.client.COM.pem;
ssl_certificate_key /etc/ssl/certs/STAR.client.COM.key;
ssl_protocols TLSv1.2 TLSv1.1 TLSv1;
ssl_ciphers HIGH:!aNULL:!MD5;
ssl_prefer_server_ciphers on;
location / {
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
proxy_set_header X-NginX-Proxy true;
proxy_pass http://searchapl;
proxy_redirect http:// https://;
# Socket.IO Support
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
# time out settings
proxy_connect_timeout 159s;
proxy_send_timeout 600;
proxy_read_timeout 600;
proxy_buffer_size 64k;
proxy_buffers 16 32k;
proxy_busy_buffers_size 64k;
proxy_temp_file_write_size 64k;
proxy_pass_header Set-Cookie;
}
}
Этот Nginx используется в качестве обратного прокси-сервера, который перенаправляет на работающий контейнер TomcatХорошо.Перенаправление работает успешно, если я ввожу контейнер IP.Это берет меня к Tomcat.Но за 443 года я получаю сертификаты.Что еще я могу проверить?Сертификат и ключ имеют доступ для чтения.
ОК. Теперь я продвигаюсь на шаг вперед, но все еще получаю ошибку.Я создал файл .pem вместо .crt с всей цепочкой первичных сертификатов и промежуточного + root.
Больше не возникает ошибка при невозможности проверить центр сертификации, но теперь я получаю:
***--2018-08-24 21:05:05-- https://xxxxxxxxxxxx.com/
Resolving xxxxxxxxxxxx.com (gp_searchv2.grey.com)... 23.x.x.x
Connecting to xxxxxxxxx.com (xxxxxxxxxx.com)|23.x.x.x|:443... connected.
HTTP request sent, awaiting response... 400
2018-08-24 21:05:05 ERROR 400: (no description).***