Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/docker/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Docker HTTP在nginx.conf中重定向到HTTPS_Docker_Nginx_Docker Compose_Devops - Fatal编程技术网

Docker HTTP在nginx.conf中重定向到HTTPS

Docker HTTP在nginx.conf中重定向到HTTPS,docker,nginx,docker-compose,devops,Docker,Nginx,Docker Compose,Devops,我有一个nginx.conf,其中我正在本地主机上运行一个应用程序。我需要将应用程序从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=1

我有一个nginx.conf,其中我正在本地主机上运行一个应用程序。我需要将应用程序从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\u URL=http://localhost:8080
env变量

有没有人知道,从HTTP重定向到HTTPS需要改变什么


提前谢谢。

我定制了您的docker compose yml

  • 您的docker-compose.yml无法用于https,因为某些部分错误或缺失

  • 要使用HTTPS,您必须使用Openssl创建证书。这些文件必须位于容器中的/etc/nginx/certs文件夹中

  • 将证书放入文件夹时,必须将-VIRTUAL_PORT=8080设置为443,并将APP_URL从http更改为https

  • 当您启动服务并将其分配到网络“web”时,nginx会自动看到新服务已注册。它会自动映射到图像中指定的端口。这在volume命令“/tmp/docker.sock:ro”中发生。“:ro”表示只读

  • 如果将服务分配给“内部”网络,则无法从外部访问该服务,Nginx将忽略该服务。请参阅“mysql”服务

  • 在“依赖”一词中,我说所有服务都必须在bookstack开始之前启动。这很重要!首先是Nginx,然后是MySql,最后是bookstack

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

  • 我的小费!我会将服务“nginx--proxy”存储在一个separate docker compose文件中。然后,您可以轻松地向nginx注册更多服务

  • 祝你好运,如果你只想在本地使用Bookstack,HTTPS现在可能不会那么紧急。否则搜索“为Nginx本地创建证书”

    在开始创建网络“web”之前:


    这个解决方案对我有效:-

    在docker-compose.yml中,在nginx服务部分添加了networks标记-

        networks:
        - bookstack-bridge
    
    
    并且在nginx.conf中添加了proxy_pass作为-

    proxy_pass http://bookstack:8080;
    

    谢谢你们的帮助。

    但我不想使用符号链接。需要使用服务器块。你能告诉我需要更改什么配置吗?你能告诉我你的nginx错误日志是怎么写的吗?并设置代理_pass;代理你的通行证;如果您确认您的容器端口为8080?我无法看到容器内的错误日志。这是错误日志:-2020/09/28 10:08:25[warn]29#29:*7连接到上游时临时禁用上游服务器,客户端:192.168.16.1,服务器:localhost,请求:“GET/HTTP/2.0”,上游:,主机:“localhost”抱歉,您可以设置从容器或容器名称传递到IP的代理吗?请测试一下。
        networks:
        - bookstack-bridge
    
    
    proxy_pass http://bookstack:8080;