Nginx http 未重定向到 https

Nginx http 未重定向到 https

注意:我之前在 StackOverflow 上问过这个问题,但没有得到任何答复。


是的,这个问题已经被问过多次了,是的,我已经尝试了所有的解决方案,不管是否接受。但仍然面临一个问题。

可以访问网站https://example.in但 Nginx 没有重定向http://example.inhttps://example.in

我在 docker 中运行 NGINX。

Nginx 配置

server {
        listen 80 default_server;
        listen [::]:80 default_server;

        server_name example.in www.example.in;

        return 301 https://$server_name$request_uri;
}

server {
        listen 443 ssl;
        server_name example.in www.example.in;
        ssl_certificate /etc/nginx/certs/example.in.crt;
        ssl_certificate_key /etc/nginx/certs/example.in.key;

        location /static {
                alias /vol/web/;
        }

        location / {
                uwsgi_pass ${APP_HOST}:${APP_PORT};
                include /etc/nginx/uwsgi_params;
                client_max_body_size 10M;
        }
}

Nginx 的 Dockerfile 是

FROM nginx:1.21.3
LABEL maintainer="example.in"

COPY ./default.conf.tpl /etc/nginx/default.conf.tpl
COPY ./uwsgi_params /etc/nginx/uwsgi_params
COPY ./data/certs/example.in.crt /etc/nginx/certs/
COPY ./data/certs/example.in.key /etc/nginx/certs/
COPY ./run.sh /run.sh

ENV LISTEN_PORT=8000
ENV APP_HOST=app
ENV APP_PORT=9000

RUN mkdir -p /vol/static && \
    chmod 755 /vol/static && \
    touch /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"]

docker-compose.yml

version: '3.9'

services:
  app:
    build:
      context: .
    restart: always
    volumes:
      - static-data:/vol/web
    environment:
      - ... (some environment variables)
    
  proxy:
    build:
      context: ./proxy
    restart: always
    depends_on:
      - app
    ports:
      - "80:8000"
      - "443:443"
    volumes:
      - static-data:/vol/web
      - ./data/certs:/etc/nginx/certs

volumes:
  static-data:

这里提到的应用程序是一个通过 Nginx 提供静态文件的 Django Web 应用程序。

在此之前我从未使用过 Nginx。

一些可能对调试有用的信息 -

  1. docker container logs <nginx-container-id>不要显示任何尝试访问 http 的日志。
  2. 用linux防火墙检查,80端口可以访问。

PS:几天前,我遇到了另一个与此完全相反的 Nginx 配置问题。如果你需要参考,请参阅这个问题。尽管我自己能够找到解决方案并将其分享在那里。

答案1

您正在将 docker-compose.yml 中的端口 80 映射到端口 8000。您的请求永远不会到达 nginx。

ports:
  - "80:80"
  - "443:443"

相关内容