ПРИМЕЧАНИЕ. Ранее я задавал этот вопрос на StackOverflow, но не получил ответа.
Да, этот вопрос задавали несколько раз, и да, я рассмотрел все решения, принятые или нет. Но все же столкнулся с проблемой.
я может получить доступ веб-сайт в https://example.in но Nginx не перенаправляет http://пример.in к https://example.in
Я запускаю NGINX внутри докера.
Конфигурации Nginx
сервер {
слушать 80 default_server;
слушать [::]:80 default_server;
имя_сервера пример.in www.example.in;
вернуть 301 https://$server_name$request_uri;
}
сервер {
слушать 443 ssl;
имя_сервера пример.in www.example.in;
ssl_certificate /etc/nginx/certs/example.in.crt;
ssl_certificate_key /etc/nginx/certs/example.in.key;
местоположение/статический {
псевдоним /vol/web/;
}
место расположения / {
uwsgi_pass ${APP_HOST}:${APP_PORT};
включить /etc/nginx/uwsgi_params;
client_max_body_size 10M;
}
}
Dockerfile для Nginx есть
ОТ nginx: 1.21.3
ЯРЛЫКmaintainer="example.in"
КОПИРОВАТЬ ./default.conf.tpl /etc/nginx/default.conf.tpl
КОПИРОВАТЬ ./uwsgi_params /etc/nginx/uwsgi_params
КОПИРОВАТЬ ./data/certs/example.in.crt /etc/nginx/certs/
КОПИРОВАТЬ ./data/certs/example.in.key /etc/nginx/certs/
КОПИРОВАТЬ ./run.sh /run.sh
ENV LISTEN_PORT=8000
ENV APP_HOST=приложение
ENV APP_PORT = 9000
RUN mkdir -p /vol/static && \
chmod 755 /vol/static && \
коснитесь /etc/nginx/conf.d/default.conf && \
chown nginx:nginx /etc/nginx/conf.d/default.conf && \
chmod +x /run.sh && \
chmod +r /etc/nginx/certs/example.in.crt && \
chmod +r /etc/nginx/certs/example.in.key
VOLUME /vol/static
CMD ["/run.sh"]
докер-compose.yml
версия: '3.9'
Сервисы:
приложение:
строить:
контекст: .
перезапуск: всегда
тома:
- статические данные:/vol/web
среда:
- ... (некоторые переменные окружения)
прокси:
строить:
контекст: ./прокси
перезапуск: всегда
зависит от:
- приложение
порты:
- "80:8000"
- "443:443"
тома:
- статические данные:/vol/web
- ./данные/сертификаты:/etc/nginx/сертификаты
тома:
статические данные:
Упомянутое здесь приложение — это веб-приложение Django, обслуживающее статические файлы через Nginx.
До этого я никогда не работал с Nginx.
Еще немного информации, которая может быть полезна для отладки:
Журналы контейнера докеров <nginx-container-id>
не показывать журналы для попыток доступа по http.
- Проверено с помощью брандмауэра Linux, и порт 80 доступен.
PS: Несколько дней назад я столкнулся с другой проблемой с конфигурацией Nginx, которая была полной противоположностью этой. Если вам нужна ссылка на это, см. этот вопрос. Однако я смог найти решение сам и поделился им там же.