Nginx

從 LAN 連接到反向代理後面的服務時持續超時

  • June 6, 2021

在我的第一台家庭伺服器當機多年後,我決定再次擁有一台。這次為了學習和擁有更大的靈活性,我使用 docker 容器來做這件事。問題是,我已經使用 nginx 和 let’s ecnrypt 伴侶設置了一個反向代理,以提供 SSL 加密並避免在我的路由器上轉發更多埠。

這幾乎完美無缺,從我的帶有移動數據的手機或完全不同的網路,我可以毫無問題地訪問我的服務。當我嘗試在同一個區域網路內訪問時,問題就出現了,我可以訪問 1/10 次,而其他 9/10 則超時。

我嘗試連接的方式沒有區別;<subdomain>.<domain>在這兩種情況下都是通過使用URL的網路瀏覽器

這是我目前的容器:在此處輸入圖像描述

至於我目前的 docker-compose 文件,是這樣的:

version: '3'
services:
 reverse-proxy:
   image: jwilder/nginx-proxy
   ports:
     - '80:80'
     - '443:443'
   container_name: reverse-proxy
   networks:
     service_network: null
   volumes:
     - '/var/run/docker.sock:/tmp/docker.sock:ro'
     - '.\nginx\certs:/etc/nginx/certs'
     - '.\nginx\vhosts:/etc/nginx/vhost.d'
     - '.\nginx\html:/usr/share/nginx/html'
 ACME-SSL:
   image: jrcs/letsencrypt-nginx-proxy-companion
   depends_on:
     - reverse-proxy
   environment:
     NGINX_PROXY_CONTAINER: reverse-proxy
   networks:
     service_network: null
   volumes:
     - '/var/run/docker.sock:/var/run/docker.sock:ro'
     - '.\nginx\certs:/etc/nginx/certs'
     - '.\nginx\vhosts:/etc/nginx/vhost.d'
     - '.\nginx\html:/usr/share/nginx/html'
 nginx:
   image: nginx
   depends_on:
     - reverse-proxy
   ports:
     - '8080:80'
   expose:
     - 8080
   environment:
     - NGINX_HOST=<DOMAIN>
     - NGINX_PORT=80
     - HTTP_PORT=8080
     - VIRTUAL_HOST=<DOMAIN>
     - LETSENCRYPT_HOST=<DOMAIN>
     - LETSENCRYPT_EMAIL=<EMAIL>
   networks:
     service_network: null
   volumes:
     - '.\<DIRECTORY>:/usr/share/nginx/html'
 koel:
   image: hyzual/koel
   depends_on:
     - reverse-proxy
     - database
   ports:
     - '8000:80'
   expose:
     - 8000
   environment:
     - HTTP_PORT=8000
     - VIRTUAL_HOST=<SUBDOMAIN>.<DOMAIN>
     - LETSENCRYPT_HOST=<SUBDOMAIN>.<DOMAIN>
     - LETSENCRYPT_EMAIL=<EMAIL>
     - DB_CONNECTION=mysql
     - DB_HOST=database
     - DB_USERNAME=koel
     - DB_PASSWORD=<PASS>
     - DB_DATABASE=koel
     - FORCE_HTTPS=true
     - LASTFM_API_KEY=<API_SECRET>
     - LASTFM_API_SECRET=<API_KEY>
   networks:
     service_network: null
     db_network: null
   volumes:
     - '/e/musica:/music'
     - '.\koel\covers:/var/www/html/public/img/covers'
     - '.\koel\search_index:/var/www/html/storage/search-indexes'
 database:
   image: 'mysql/mysql-server:5.7'
   volumes:
     - '.\mysql:/var/lib/mysql'
   environment:
     - MYSQL_ROOT_PASSWORD=<PASS>
     - MYSQL_DATABASE=koel
     - MYSQL_USER=koel
     - MYSQL_PASSWORD=<PASS>
   networks:
     db_network: null
networks:
 service_network:
   driver: bridge
 db_network:
   driver: bridge

*我已將一些值更改為之間的描述,< >因為它們包含私人資訊。

如果您的域映射到路由器的 WAN IP,則可能是路由器拒絕將網路內部的流量發送回它。

如果是這種情況,您可以通過將您的域名和反向代理的 IP 寫入 /etc/hosts 然後測試連接來排除它。

永久修復將要求您執行拆分 DNS 或在路由器的 DNS 覆蓋中維護此主機名到 IP 的映射(如果有這樣的選項)。

引用自:https://serverfault.com/questions/1065857