Reverse-Proxy

路由器或反向代理 - 網路故障

  • April 20, 2021

我有一個 edgerouter x sfp 作為網際網路的主路由器。到此路由器,伺服器與執行稱為 swag 的反向代理 docker 連接,例如。我用來從網際網路訪問 nextcloud 和幾個 ngnix docker 的letsencrypt。

這幾乎很好用。因此,導航這些站點和 nextcloud 可以工作,但是當我開始下載大文件時,問題就開始了。

當我通過網路瀏覽器從 nextcloud 下載 20GB 文件時,根據 chrome,它由於“網路故障”而失敗。我可以重新啟動下載,並且可以在多次重新啟動後完成下載(從下載菜單中的 kontext 菜單)。當我從 nginx 站點下載相同的文件時也會發生同樣的情況,因此它與 nextcloud 沒有直接關係。

但是,當我通過 OpenVPN 連接到我的網路並通過內部 LAN IP 下載文件時,我可以成功下載文件。因此,通過 OpenVPN 使用伺服器的直接 IP 不會導致 chrome 中出現“網路故障”消息。

所以有人可以幫我找出問題所在:

  1. 是不是edgerouter x sfp配置錯了(我只是加了埠轉發位)
  2. 反向代理是問題嗎(這裡我從 docker 本身獲取了建議的代理配置)
  3. 或者是其他東西?

編輯 1:nginx 配置文件:

server {
   listen 443 ssl;
   listen [::]:443 ssl;

   server_name shop.*;

   include /config/nginx/ssl.conf;

   client_max_body_size 0;

   # enable for ldap auth, fill in ldap details in ldap.conf
   #include /config/nginx/ldap.conf;

   location / {
       # enable the next two lines for http auth
       #auth_basic "Username and Password Required";
       #auth_basic_user_file /config/nginx/.htpasswd;

       # enable the next two lines for ldap auth
       #auth_request /auth;
       #error_page 401 =200 /login;

       include /config/nginx/proxy.conf;
       resolver 127.0.0.11 valid=30s;
       set $upstream_grafana nginx;
       proxy_pass http://$upstream_grafana;
   }
}

nextcloud 配置文件:

server {
   listen 443 ssl;
   listen [::]:443 ssl;

   server_name nextcloud.*;
   
   include /config/nginx/ssl.conf;
   
   add_header Strict-Transport-Security "max-age=15552000; includeSubDomains";
           

   location / {
       include /config/nginx/proxy.conf;
       resolver 127.0.0.11 valid=30s;
       set $upstream_nextcloud nextcloud;
       proxy_max_temp_file_size 2048m;
       
       proxy_pass https://$upstream_nextcloud;         
   }
   
   
   location ^~ /.well-known {
       # The following 6 rules are borrowed from `.htaccess`

       location = /.well-known/carddav     { return 301 /remote.php/dav/; }
       location = /.well-known/caldav      { return 301 /remote.php/dav/; }
       # Anything else is dynamically handled by Nextcloud
       location ^~ /.well-known            { return 301 /index.php$uri; }

       try_files $uri $uri/ =404;
   }       
}

好的,我通過 mysel.f 弄清楚了

兩個 Docker 都基於 nginx 伺服器,並且有一個名為 proxy_max_temp_file_size 的屬性,用於在將 docker 與反向 porxy 一起使用時設置臨時文件的大小。現在我將它設置為一個非常低的值(100m),所以永遠不應該呼叫超時,因此現在會發生網路故障。您也可以使用 proxy_max_temp_file_size=0 禁用它,但我不確定哪個更好,所以我目前將其保留在 100m。

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