Как сделать так, чтобы 2 nginx хостов проксировали один и тот же целевой сайт? - PullRequest
0 голосов
/ 06 августа 2020

Я nginx новичок.

Я настраиваю OnlyOffice на тестовой виртуальной машине здесь. Я запускаю OnlyOffice в контейнере docker.

Я создал файл конфигурации nginx для прокси домена, для которого у меня был сертификат, для контейнера OnlyOffice docker. Все работало нормально.

Я решил использовать другое доменное имя. Я оставил исходный файл conf на месте и добавил новый для другого домена, указав на тот же docker контейнер и порты.

Внезапно оба экземпляра перестали работать! Я потратил целую вечность, пытаясь выяснить, почему, и кажется, что некоторые запросы больше не пересылаются правильно.

Я удалил исходный файл conf с сайтов с включенной поддержкой, и он снова начал работать.

Я полагаю, что есть проблема с моими файлами conf или с nginx пересылкой нескольких отдельных сайтов на одни и те же порты прокси.

Вот один из файлов conf (другой точно такой же, но с другим хостом). Очевидно, я отредактировал доменное имя, чтобы защитить виновных!

    map $http_host $this_host {
      "" $host;
      default $http_host;
    }
    map $http_x_forwarded_proto $the_scheme {
      default $http_x_forwarded_proto;
      "" $scheme;
    }
    map $http_x_forwarded_host $the_host {
      default $http_x_forwarded_host;
      "" $this_host;
    }
    map $http_upgrade $proxy_connection {
      default upgrade;
      "" close;
    }
    proxy_set_header Host $http_host;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection $proxy_connection;
    proxy_set_header X-Forwarded-Host $the_host;
    proxy_set_header X-Forwarded-Proto $the_scheme;

    proxy_headers_hash_max_size 512;
    proxy_headers_hash_bucket_size 128; 

    log_format upstreamlog '[$time_local] $remote_addr - $remote_user - $server_name to: $upstream_addr: $request upstream_response_time $upstream_response_time msec $msec request_time $request_time';

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

      ssl_certificate /etc/letsencrypt/live/leaf.example.com/fullchain.pem;
      ssl_certificate_key /etc/letsencrypt/live/leaf.example.com/privkey.pem;

      server_name leaf.example.com;

      fastcgi_keep_conn on;
      fastcgi_index   Default.aspx;
      fastcgi_intercept_errors on;


      include fastcgi_params;

      fastcgi_param HTTP_X_REWRITER_URL $http_x_rewriter_url;
      fastcgi_param SERVER_NAME $host;
      fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
      fastcgi_param PATH_INFO "";

      fastcgi_read_timeout    600;
      fastcgi_send_timeout    600;

    access_log  /var/log/nginx/access.log upstreamlog;

      server_tokens off;
      rewrite ^\/OfficeWeb(\/apps\/.*)$ /web-apps$1 redirect;
      location / {
        proxy_pass http://localhost:9200;
        proxy_http_version 1.1;
      }
      location /spellchecker/ {
        proxy_pass http://localhost:9280/;
        proxy_http_version 1.1;
      }

    }

Должен ли я сообщить об этом как об ошибке, или я сделал что-то действительно глупое, чтобы вызвать проблему?

...