簡體   English   中英

HTTP 重定向到 nginx.conf 中的 HTTPS

[英]HTTP redirected to HTTPS in nginx.conf

我有一個 nginx.conf,我在 localhost 上運行一個應用程序。 我需要將應用程序從 HTTP 重定向到 HTTPS。 nginx.conf ,我有如下配置:


http {
  error_log /etc/nginx/error/error.log warn; #./nginx/error.log warn;
  client_max_body_size 20m;

  proxy_cache_path /etc/nginx/cache keys_zone=one:500m max_size=1000m;

  server {
    listen 80;
    server_name localhost; 
    return 301 https://$server_name$request_uri;
     }

  server {
    listen 443 ssl http2;

    server_name localhost; 

    ssl_session_cache shared:SSL:50m;
    ssl_session_timeout 1d;
    ssl_session_tickets off;

    ssl_certificate /etc/nginx/ssl.crt;
    ssl_certificate_key /etc/nginx/ssl.key;

    ssl_protocols TLSv1.2;
    ssl_ciphers EECDH+AESGCM:EDH+AESGCM:EECDH:EDH:!MD5:!RC4:!LOW:!MEDIUM:!CAMELLIA:!ECDSA:!DES:!DSS:!3DES:!NULL;
    ssl_prefer_server_ciphers on;

    keepalive_timeout 70;

    location / {
      proxy_pass http://localhost:80; 
      proxy_ssl_certificate /etc/nginx/ssl.crt; 
      proxy_ssl_certificate_key /etc/nginx/ssl.key; 
      proxy_ssl_verify    off;
      allow all;
      proxy_redirect          off;
      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-Host $server_name;
      proxy_set_header   X-Forwarded-Proto https;
      #access_log      /var/log/nginx/access.log;
      #error_log       /var/log/nginx/error.log;
      client_max_body_size    0;
      client_body_buffer_size 128k;
      proxy_connect_timeout   1200s;
      proxy_send_timeout      1200s;
      proxy_read_timeout      1200s;
      proxy_buffers           32 4k;
    }

    }

和 docker-compose.yml 如下:-

version: '2'
services:

  mysql:
    image: mysql:5.7.21
    restart: always
    environment:
    - MYSQL_ROOT_PASSWORD=admin
    - MYSQL_DATABASE=bookstack
    - MYSQL_USER=bookstack
    - MYSQL_PASSWORD=admin
    volumes:
    - ./mysql:/var/lib/mysql
    networks:
    - bookstack-bridge


  bookstack:
    
    image: solidnerd/bookstack:latest
    container_name: bookstack
    restart: always
    depends_on:
    - mysql
    environment:
 
    - APP_URL=http://localhost:8080

    volumes:
    - ./uploads:/var/www/bookstack/public/uploads
    - ./storage-uploads:/var/www/bookstack/public/storage
    ports:
    - 8080:8080
    networks:
    - bookstack-bridge

  nginx:
    image: nginx:latest
    container_name: bookstack-nginx
    restart: always


在 docker-compose.yml 中,我確實有APP_URL=http://localhost:8080變量。

有沒有人知道,從 HTTP 重定向到 HTTPS 需要更改什么?

提前致謝。

我定制了你的 docker-compose-yml。

  1. 您的 docker-compose.yml 不適用於 https,因為某些部分錯誤或丟失。

  2. 要使用 HTTPS,您必須使用 Openssl 創建證書。 這些必須在容器中的文件夾 /etc/nginx/certs 中。

  3. 當您將證書放在文件夾中時,您必須將 - VIRTUAL_PORT=8080 設置為 443 並將 APP_URL 從 http 更改為 https

  4. 當您啟動服務並將其分配給網絡“web”時,nginx 會自動看到注冊了一個新服務。 它會自動映射到映像中指定的端口。 這發生在音量命令“/tmp/docker.sock:ro”上。 ":ro" 代表只讀

  5. 如果您將服務分配給“內部”網絡,則無法從外部訪問它,Nginx 會忽略它。 請參閱“mysql”服務。

  6. 對於“depends_on:”,我說所有服務都必須在 bookstack 啟動之前啟動。 這個很重要! 首先是 Nginx,然后是 MySql,最后是書架。

  7. 我更喜歡在自己的本地域上使用 VIRTUAL_HOST。 您也可以在那里使用 localhost,唯一重要的是操作系統中的“hosts”文件指向您的外部 Docker IP。 示例:“192.168.5.121 bookstack.local”

  8. 我的提示! 我會將服務“nginx--proxy”存儲在單獨的 docker-compose 文件中。 然后,您可以輕松地向 nginx 注冊更多服務。

祝你好運,如果你只想在本地使用 Bookstack,HTTPS 現在可能並不那么緊迫。 否則搜索“為 Nginx 本地創建證書”

在開始創建網絡“web”之前:

docker network create web
version: '2.4'

services:

  mysql:
    image: mysql:5.7.21
    container_name: bookstack-mysql
    restart: unless-stopped
    networks:
      - "internal"
    healthcheck:
      test: "exit 0"
    environment:
      - MYSQL_ROOT_PASSWORD=admin
      - MYSQL_DATABASE=bookstack
      - MYSQL_USER=bookstack
      - MYSQL_PASSWORD=admin
    volumes:
      - ./docker/data/mysql:/var/lib/mysql

  bookstack:
    image: solidnerd/bookstack:0.29.3
    container_name: bookstack
    restart: unless-stopped
    networks:
      - "web"
      - "internal"
    depends_on:
      nginx--proxy:
        condition: service_started
      mysql:
        condition: service_healthy
    environment:
      - VIRTUAL_HOST=bookstack.local
      - VIRTUAL_PORT=8080
      - DB_HOST=mysql:3306
      - DB_DATABASE=bookstack
      - DB_USERNAME=bookstack
      - DB_PASSWORD=admin
      - APP_URL=http://bookstack.local
    volumes:
      - ./docker/data/uploads:/var/www/bookstack/public/uploads
      - ./docker/data/storage-uploads:/var/www/bookstack/storage/uploads

  nginx--proxy:
    image: jwilder/nginx-proxy:latest
    container_name: nginx--proxy
    restart: always
    environment:
      DEFAULT_HOST: default.vhost
    ports:
      - "80:80"
      - "443:443"
    volumes:
      - ./docker/data/certs:/etc/nginx/certs
      - /var/run/docker.sock:/tmp/docker.sock:ro
    networks:
      - "web"
      - "internal"

networks:
  web:
    external: true
  internal:
    external: false

該解決方案對我有用:-

在 docker-compose.yml 中,在 nginx 服務部分添加了網絡標簽-

    networks:
    - bookstack-bridge

並在 nginx.conf 添加了 proxy_pass as-

proxy_pass http://bookstack:8080;

謝謝你們的幫助。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM