![](/img/trans.png)
[英]Nginx docker - basic nginx.conf file to accept 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。
您的 docker-compose.yml 不適用於 https,因為某些部分錯誤或丟失。
要使用 HTTPS,您必須使用 Openssl 創建證書。 這些必須在容器中的文件夾 /etc/nginx/certs 中。
當您將證書放在文件夾中時,您必須將 - VIRTUAL_PORT=8080 設置為 443 並將 APP_URL 從 http 更改為 https
當您啟動服務並將其分配給網絡“web”時,nginx 會自動看到注冊了一個新服務。 它會自動映射到映像中指定的端口。 這發生在音量命令“/tmp/docker.sock:ro”上。 ":ro" 代表只讀
如果您將服務分配給“內部”網絡,則無法從外部訪問它,Nginx 會忽略它。 請參閱“mysql”服務。
對於“depends_on:”,我說所有服務都必須在 bookstack 啟動之前啟動。 這個很重要! 首先是 Nginx,然后是 MySql,最后是書架。
我更喜歡在自己的本地域上使用 VIRTUAL_HOST。 您也可以在那里使用 localhost,唯一重要的是操作系統中的“hosts”文件指向您的外部 Docker IP。 示例:“192.168.5.121 bookstack.local”
我的提示! 我會將服務“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.