Рейтинг:0

Обратный прокси-сервер Nginx загружает разные сайты при обновлении

флаг fi

Я хочу разместить несколько веб-сайтов на одном сервере с обратным прокси-сервером nginx, следуя этому руководству. https://www.datanovia.com/en/lessons/how-host-multiple-https-websites-on-one-server/

Прокси Nginx и каждый сайт запускаются отдельно с помощью Docker. Но каждый раз, когда я перезагружаю один из веб-сайтов, он загружает содержимое другого веб-сайта. Например:

  • Загрузите веб-сайтone.tk в первый раз, загрузив содержимое веб-сайта ONE.

  • Обновите веб-сайтone.tk, загрузив содержимое веб-сайта TWO

  • Обновите веб-сайтone.tk еще раз, загрузив содержимое веб-сайта THREE.

  • Загрузите веб-сайтtwo.tk в первый раз, загрузите веб-сайт ДВА контента

  • Обновите веб-сайтtwo.tk , загруженный контент веб-сайта THREE.

Я новичок как в nginx, так и в докере. Я не могу сказать, возникает ли проблема в nginx или в докере.Может ли кто-нибудь посоветовать? Большое тебе спасибо.

nginx-proxy default.conf это

карта $http_x_forwarded_proto $proxy_x_forwarded_proto { по умолчанию $http_x_forwarded_proto;
  '' $схема;
}
карта $http_x_forwarded_port $proxy_x_forwarded_port {
  по умолчанию $http_x_forwarded_port;
  '' $сервер_порт;
}
карта $http_upgrade $proxy_connection {
  обновление по умолчанию;
  '' близко;
}
server_names_hash_bucket_size 128;
сопоставить $proxy_x_forwarded_proto $proxy_x_forwarded_ssl {
  по умолчанию выключено;
  https на;
}
gzip_types text/plain text/css application/javascript application/json application/x-javascript text/xml application/xml application/xml+rss t>log_format vhost '$host $remote_addr - $remote_user [$time_local] '
                 '"$запрос" $статус $body_bytes_sent '
                 '"$http_referer" "$http_user_agent" '
                 '"$upstream_addr"';
доступ_лог выключен;
                ssl_protocols TLSv1.2 TLSv1.3;
                ssl_ciphers 'ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA3> ssl_prefer_server_ciphers выключен;
журнал_ошибок /dev/stderr;
# Поддержка HTTP 1.1
прокси_http_версия 1.1;
прокси_буферизация выключена;
proxy_set_header Хост $http_host;
proxy_set_header Обновить $http_upgrade;
proxy_set_header Соединение $proxy_connection;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $proxy_x_forwarded_proto;
proxy_set_header X-Forwarded-Ssl $proxy_x_forwarded_ssl;
proxy_set_header X-Forwarded-Port $proxy_x_forwarded_port;
proxy_set_header X-Исходный URI $request_uri;
# Смягчить атаку httpoxy (подробности см. в README)
proxy_set_header Прокси "";
сервер {
        имя сервера _; # Это просто недопустимое значение, которое никогда не сработает на реальном имени хоста.
        server_tokens отключены;
        слушать 80;
        access_log /var/log/nginx/access.log vhost;
        вернуть 503;
}
сервер {
        имя сервера _; # Это просто недопустимое значение, которое никогда не сработает на реальном имени хоста.
        server_tokens отключены;
        слушать 443 ssl http2;
        access_log /var/log/nginx/access.log vhost;
        вернуть 503;
        ssl_session_cache общий: SSL: 50 м;
        ssl_session_tickets выключен;
        ssl_certificate /etc/nginx/certs/default.crt;
        ssl_certificate_key /etc/nginx/certs/default.key;
}


# сайтone.tk
вышестоящий сайтone.tk {
## Может быть подключен к сети "nginx-proxy"
# веб-сайтonetk_my-app_1
сервер 192.168.32.8:80;
}

сервер {
        имя_сервера веб-сайтone.tk;
        слушать 80 ;
        access_log /var/log/nginx/access.log vhost;
        # Не перенаправлять HTTPS вызов Let'sEncrypt ACME
        расположение ^~ /.well-known/acme-challenge/ {
                auth_basic выключен;
                auth_request выключен;
                позволять все;
                корень /usr/share/nginx/html;
                try_files $uri =404;
                сломать;
                      }
        место расположения / {
                вернуть 301 https://$host$request_uri;
        }
}
сервер {
        имя_сервера веб-сайтone.tk;
        слушать 443 ssl http2 ;
        access_log /var/log/nginx/access.log vhost;
        ssl_session_timeout 5 м;
        ssl_session_cache общий: SSL: 50 м;
        ssl_session_tickets выключен;
        ssl_certificate /etc/nginx/certs/websiteone.tk.crt;
        ssl_certificate_key /etc/nginx/certs/websiteone.tk.key;
        ssl_dhparam /etc/nginx/certs/websiteone.tk.dhparam.pem;
        ssl_stapling включен;
        ssl_stapling_verify включен;
        ssl_trusted_certificate /etc/nginx/certs/websiteone.tk.chain.pem;
        add_header Strict-Transport-Security «max-age=31536000» всегда;
        включить /etc/nginx/vhost.d/default;
        
        место расположения / {
                        proxy_pass http://websiteone.tk;
        }
}


# сайтtwo.tk
вышестоящий сайтtwo.tk {
## Может быть подключен к сети "nginx-proxy"
# веб-сайтtwotk_my-app_1
сервер 192.168.32.13:80;
}

сервер {
        имя_сервера веб-сайтtwo.tk;
        слушать 80 ;
        access_log /var/log/nginx/access.log vhost;
        # Не перенаправлять HTTPS вызов Let'sEncrypt ACME
        расположение ^~ /.well-known/acme-challenge/ {
                auth_basic выключен;
                auth_request выключен;
                позволять все;
                корень /usr/share/nginx/html;
                try_files $uri = 404;
                сломать;
        }
        место расположения / {
                вернуть 301 https://$host$request_uri;
        }
}
сервер {
        имя_сервера веб-сайтtwo.tk;
        слушать 443 ssl http2 ;
        access_log /var/log/nginx/access.log vhost;
        ssl_session_timeout 5 м;
        ssl_session_cache общий: SSL: 50 м;
        ssl_session_tickets выключен;
        ssl_certificate /etc/nginx/certs/websitetwo.tk.crt;
        ssl_certificate_key /etc/nginx/certs/websitetwo.tk.key;
        ssl_dhparam /etc/nginx/certs/websitetwo.tk.dhparam.pem;
        ssl_stapling включен;
        ssl_stapling_verify включен;
        ssl_trusted_certificate /etc/nginx/certs/websitetwo.tk.chain.pem;
        add_header Strict-Transport-Security "max-age=31536000" всегда;
        включить /etc/nginx/vhost.d/default;
        
        место расположения / {
                        proxy_pass http://websitetwo.tk;
        }
}

# сайтthree.tk
вышестоящий веб-сайтthree.tk {
## Может быть подключен к сети "nginx-proxy"
# веб-сайтthreetk_my-app_1
сервер 192.168.32.3:80;
}
сервер {
        имя_сервера Websitethree.tk;
        слушать 80 ;
        access_log /var/log/nginx/access.log vhost;
        # Не перенаправлять HTTPS вызов Let'sEncrypt ACME
        расположение ^~ /.well-known/acme-challenge/ {
                auth_basic выключен;
                auth_request выключен;
                позволять все;
                корень /usr/share/nginx/html;
                try_files $uri =404;
                сломать;
        }
        место расположения / {
                вернуть 301 https://$host$request_uri;
        }
}

сервер {
        имя_сервера веб-сайтthree.tk;
        слушать 443 ssl http2 ;
        access_log /var/log/nginx/access.log vhost;
        ssl_session_timeout 5 м;
        ssl_session_cache общий: SSL: 50 м;
        ssl_session_tickets выключен;
        ssl_certificate /etc/nginx/certs/websitethree.tk.crt;
        ssl_certificate_key /etc/nginx/certs/websitethree.tk.key;
        ssl_dhparam /etc/nginx/certs/websitethree.tk.dhparam.pem;
        ssl_stapling включен;
        ssl_stapling_verify включен;
        ssl_trusted_certificate /etc/nginx/certs/websitethree.tk.chain.pem;
        add_header Strict-Transport-Security «max-age=31536000» всегда;
        включить /etc/nginx/vhost.d/default;
        место расположения / {
                        proxy_pass http://websitethree.tk;
        }
}

Docker-compose для прокси-сервера nginx:

версия: '3.6'
Сервисы:
  нгинкс:
    изображение: nginx
    этикетки:
      com.github.jrcs.letsencrypt_nginx_proxy_companion.nginx_proxy: «истина»
    имя_контейнера: nginx
    перезапуск: если не остановлен
    порты:
      - "80:80"
      - "443:443"
    тома:
      - ./conf.d:/etc/nginx/conf.d
      - ./vhost.d:/etc/nginx/vhost.d
      - ./html:/usr/доля/nginx/html
      - ./сертификаты:/etc/nginx/сертификаты:ro

  nginx-ген:
    образ: jwilder/docker-gen
    команда: -notify-sighup nginx -watch -wait 5s:30s /etc/docker-gen/templates/nginx.tmpl /etc/nginx/conf.d/default.conf
    имя_контейнера: nginx-gen
    перезапуск: если не остановлен
    тома:
      - ./conf.d:/etc/nginx/conf.d
      - ./vhost.d:/etc/nginx/vhost.d
      - ./html:/usr/доля/nginx/html
      - ./сертификаты:/etc/nginx/сертификаты:ro
      - /var/run/docker.sock:/tmp/docker.sock:ro
      - ./nginx.tmpl:/etc/docker-gen/templates/nginx.tmpl:ro

  nginx-letsencrypt:
    изображение: jrcs/letsencrypt-nginx-proxy-companion
    имя_контейнера: nginx-letsencrypt
    перезапуск: если не остановлен
    тома:
      - ./conf.d:/etc/nginx/conf.d
      - ./vhost.d:/etc/nginx/vhost.d
      - ./html:/usr/доля/nginx/html
      - ./сертификаты:/etc/nginx/сертификаты:RW
      - /var/run/docker.sock:/var/run/docker.sock:ro
    среда:
      NGINX_DOCKER_GEN_CONTAINER: «nginx-ген»
      NGINX_PROXY_CONTAINER: "nginx"
сети:
  По умолчанию:
    внешний:
      имя: nginx-прокси

nginx default.conf для одного из веб-сайтов:

сервер {
    корень /приложение2;
    индекс index.php;

    расположение ~ \.php$ {
        fastcgi_pass php-fpm:9000;
        fastcgi_index index.php;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        fastcgi_param PHP_VALUE "error_log=/var/log/nginx/application_php_errors.log";
        fastcgi_buffers 16 16k;
        fastcgi_buffer_size 32 КБ;
        включить fastcgi_params;
    }
}

Docker-compose/yml для одного из веб-сайтов приведен ниже.

Рабочий каталог веб-сайта — /application1. Рабочий каталог Websitetwo — /application2. и т.д

версия: «3.1»
Сервисы:
    мое приложение:
        изображение: 'nginx: альпийский'
        тома:
            - '.:/application2'
            - './phpdocker/nginx/nginx.conf:/etc/nginx/conf.d/default.conf'
        перезапуск: всегда
        среда:
            - VIRTUAL_HOST=websitetwo.tk
            - ВИРТУАЛЬНЫЙ_ПОРТ=80
            - LETSENCRYPT_HOST=websitetwo.tk
        разоблачать:
            - 80
    почтальон:
        изображение: 'mailhog/mailhog:последний'
        порты:
            - '21001:8025'

    php-fpm:
        сборка: phpdocker/php-fpm
        рабочий_каталог: /application2
        тома:
            - '.:/application2'
            - './phpdocker/php-fpm/php-ini-overrides.ini:/etc/php/8.1/fpm/conf.d/99-overrides.ini'
сети:
    По умолчанию:
        внешний:
            имя: nginx-прокси

Рейтинг:1
флаг fi

Я сам узнал ответ. На случай, если кто-то столкнется с такой же ситуацией: Для каждого файла docker-compose.yml веб-сайта необходимо настроить независимую сеть .

Сначала я меняю имя сети nginx-proxy с «по умолчанию» на «прокси». Затем для каждого веб-сайта используйте независимую сеть (я назвал ее «приложение»), чтобы связать каждую службу, используемую в контейнере. Служба nginx также должна использовать прокси-сеть.

сайт docker-compose.yml:

версия: «3.1»
Сервисы:
    мое приложение:
        сети: 
            - приложение
            - прокси
        изображение: 'nginx: альпийский'
        тома:
            - '.:/application2'
            - './phpdocker/nginx/nginx.conf:/etc/nginx/conf.d/default.conf'
        перезапуск: всегда
        среда:
            - VIRTUAL_HOST=websitetwo.tk
            - ВИРТУАЛЬНЫЙ_ПОРТ=80
            - LETSENCRYPT_HOST=websitetwo.tk
        разоблачать:
            - 80
    почтальон:
        сети: 
            - приложение
        изображение: 'почтовый хог/почтовый хог: последний'
        порты:
            - '21001:8025'

    php-fpm:
        сети: 
            - приложение
        сборка: phpdocker/php-fpm
        рабочий_каталог: /application2
        тома:
            - '.:/application2'
            - './phpdocker/php-fpm/php-ini-overrides.ini:/etc/php/8.1/fpm/conf.d/99-overrides.ini'
сети:
    прокси:
        внешний:
            имя: nginx-прокси
    приложение:

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.