Score:0

พร็อกซีย้อนกลับ Nginx กำลังโหลดไซต์ต่าง ๆ เมื่อรีเฟรช

ธง fi

ฉันต้องการโฮสต์หลาย ๆ เว็บไซต์ในเซิร์ฟเวอร์เดียวด้วย nginx reverse proxy โดยทำตามบทช่วยสอนนี้ https://www.datanovia.com/th/lessons/how-host-multiple-https-websites-on-one-server/

พร็อกซี Nginx และแต่ละเว็บไซต์เปิดตัวแยกกันด้วย Docker แต่ทุกครั้งที่ฉันรีโหลดเว็บไซต์ใดเว็บไซต์หนึ่ง มันจะโหลดเนื้อหาของเว็บไซต์อื่น ตัวอย่างเช่น:

  • โหลด websiteone.tk ครั้งที่ 1 โหลดเนื้อหาของเว็บ ONE

  • รีเฟรช websiteone.tk โหลดเนื้อหาของเว็บไซต์ TWO

  • รีเฟรช websiteone.tk อีกครั้ง โหลดเนื้อหาของเว็บไซต์ THREE

  • โหลดเว็บไซต์ two.tk ครั้งที่ 1 โหลดเนื้อหาเว็บไซต์ TWO

  • รีเฟรช websitetwo.tk โหลดเว็บไซต์สามเนื้อหา

ฉันเป็นผู้เริ่มต้นสำหรับทั้ง nginx และนักเทียบท่า ฉันไม่สามารถบอกได้ว่าปัญหาเกิดขึ้นใน nginx หรือ dockerใครก็ได้โปรดกรุณาแนะนำด้วย? ขอบคุณมาก.

nginx-proxy default.conf คือ

แผนที่ $http_x_forwarded_proto $proxy_x_forwarded_proto { ค่าเริ่มต้น $http_x_forwarded_proto;
  '' $scheme;
}
แผนที่ $http_x_forwarded_port $proxy_x_forwarded_port {
  เริ่มต้น $http_x_forwarded_port;
  '' $server_port;
}
แผนที่ $http_upgrade $proxy_connection {
  อัพเกรดเริ่มต้น;
  '' ปิด;
}
server_names_hash_bucket_size 128;
แผนที่ $proxy_x_forwarded_proto $proxy_x_forwarded_ssl {
  ปิดโดยปริยาย;
  https บน;
}
gzip_types ข้อความ/ข้อความธรรมดา/แอปพลิเคชัน css/แอปพลิเคชัน javascript/แอปพลิเคชัน json/ข้อความ x-javascript/แอปพลิเคชัน xml/แอปพลิเคชัน xml/xml+rss t>log_format vhost '$host $remote_addr - $remote_user [$time_local]'
                 '"$คำขอ" $สถานะ $body_bytes_sent '
                 '"$http_referer" "$http_user_agent" '
                 '"$upstream_addr"';
access_log off;
                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;
error_log /dev/stderr;
# รองรับ HTTP 1.1
proxy_http_version 1.1;
ปิด proxy_buffering;
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-ส่งต่อ-สำหรับ $proxy_add_x_forwarded_for;
proxy_set_header X-ส่งต่อโปรโต $proxy_x_forwarded_proto;
proxy_set_header X-ส่งต่อ-Ssl $proxy_x_forwarded_ssl;
proxy_set_header X-Forwarded-Port $proxy_x_forwarded_port;
proxy_set_header X-Original-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:50m;
        ปิด ssl_session_tickets;
        ssl_certificate /etc/nginx/certs/default.crt;
        ssl_certificate_key /etc/nginx/certs/default.key;
}


#websiteone.tk
ต้นน้ำ websiteone.tk {
## สามารถเชื่อมต่อกับเครือข่าย "nginx-proxy"
#เว็บไซต์onetk_my-app_1
เซิร์ฟเวอร์ 192.168.32.8:80;
}

เซิร์ฟเวอร์ {
        server_name websiteone.tk;
        ฟัง 80 ;
        access_log /var/log/nginx/access.log vhost;
        # อย่า HTTPS เปลี่ยนเส้นทาง Let'sEncrypt ACME challenge
        ที่ตั้ง ^~ /.well-known/acme-challenge/ {
                ปิด auth_basic;
                ปิด auth_request;
                อนุญาตทั้งหมด
                รูท /usr/share/nginx/html;
                try_files $uri =404;
                หยุดพัก;
                      }
        ที่ตั้ง / {
                ส่งคืน 301 https://$host$request_uri;
        }
}
เซิร์ฟเวอร์ {
        server_name websiteone.tk;
        ฟัง 443 ssl http2 ;
        access_log /var/log/nginx/access.log vhost;
        ssl_session_timeout 5 นาที;
        ssl_session_cache ที่ใช้ร่วมกัน: SSL:50m;
        ปิด 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 เข้มงวดการขนส่งความปลอดภัย "อายุสูงสุด = 31536000" เสมอ;
        รวม /etc/nginx/vhost.d/default;
        
        ที่ตั้ง / {
                        proxy_pass http://websiteone.tk;
        }
}


#websitetwo.tk
เว็บไซต์อัพสตรีม two.tk {
## สามารถเชื่อมต่อกับเครือข่าย "nginx-proxy"
#เว็บไซต์twotk_my-app_1
เซิร์ฟเวอร์ 192.168.32.13:80;
}

เซิร์ฟเวอร์ {
        server_name เว็บไซต์ two.tk;
        ฟัง 80 ;
        access_log /var/log/nginx/access.log vhost;
        # อย่า HTTPS เปลี่ยนเส้นทาง Let'sEncrypt ACME challenge
        ที่ตั้ง ^~ /.well-known/acme-challenge/ {
                ปิด auth_basic;
                ปิด auth_request;
                อนุญาตทั้งหมด
                รูท /usr/share/nginx/html;
                try_files $uri =404;
                หยุดพัก;
        }
        ที่ตั้ง / {
                ส่งคืน 301 https://$host$request_uri;
        }
}
เซิร์ฟเวอร์ {
        server_name เว็บไซต์ two.tk;
        ฟัง 443 ssl http2 ;
        access_log /var/log/nginx/access.log vhost;
        ssl_session_timeout 5 นาที;
        ssl_session_cache ที่ใช้ร่วมกัน: SSL:50m;
        ปิด 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 เข้มงวดการขนส่งความปลอดภัย "อายุสูงสุด = 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;
}
เซิร์ฟเวอร์ {
        เว็บไซต์ server_namethree.tk;
        ฟัง 80 ;
        access_log /var/log/nginx/access.log vhost;
        # อย่า HTTPS เปลี่ยนเส้นทาง Let'sEncrypt ACME challenge
        ที่ตั้ง ^~ /.well-known/acme-challenge/ {
                ปิด auth_basic;
                ปิด auth_request;
                อนุญาตทั้งหมด
                รูท /usr/share/nginx/html;
                try_files $uri =404;
                หยุดพัก;
        }
        ที่ตั้ง / {
                ส่งคืน 301 https://$host$request_uri;
        }
}

เซิร์ฟเวอร์ {
        เว็บไซต์ server_namethree.tk;
        ฟัง 443 ssl http2 ;
        access_log /var/log/nginx/access.log vhost;
        ssl_session_timeout 5 นาที;
        ssl_session_cache ที่ใช้ร่วมกัน: SSL:50m;
        ปิด 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 เข้มงวดการขนส่งความปลอดภัย "อายุสูงสุด = 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/share/nginx/html
      - ./certs:/etc/nginx/certs:ro

  nginx-gen:
    รูปภาพ: 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/share/nginx/html
      - ./certs:/etc/nginx/certs: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
    container_name: nginx-letsencrypt
    รีสตาร์ท: เว้นแต่จะหยุด
    ปริมาณ:
      - ./conf.d:/etc/nginx/conf.d
      - ./vhost.d:/etc/nginx/vhost.d
      - ./html:/usr/share/nginx/html
      - ./certs:/etc/nginx/certs:rw
      - /var/run/docker.sock:/var/run/docker.sock:ro
    สิ่งแวดล้อม:
      NGINX_DOCKER_GEN_CONTAINER: "nginx-gen"
      NGINX_PROXY_CONTAINER: "nginx"
เครือข่าย:
  ค่าเริ่มต้น:
    ภายนอก:
      ชื่อ: nginx-proxy

nginx default.conf สำหรับหนึ่งในเว็บไซต์คือ

เซิร์ฟเวอร์ {
    รูท /application2;
    ดัชนี 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 32k;
        รวม fastcgi_params;
    }
}

docker-compose/yml สำหรับหนึ่งในเว็บไซต์อยู่ด้านล่าง

ไดเร็กทอรีการทำงานของเว็บไซต์หนึ่งคือ /application1 ไดเร็กทอรีการทำงานสองเว็บไซต์คือ /application2 เป็นต้น

รุ่น: '3.1'
บริการ:
    แอปของฉัน:
        ภาพ: 'nginx:อัลไพน์'
        ปริมาณ:
            - '.:/application2'
            - './phpdocker/nginx/nginx.conf:/etc/nginx/conf.d/default.conf'
        รีสตาร์ท: เสมอ
        สิ่งแวดล้อม:
            - VIRTUAL_HOST=websitetwo.tk
            - VIRTUAL_PORT=80
            - LETSENCRYPT_HOST=websitetwo.tk
        เปิดเผย:
            - 80
    เมลฮ็อก:
        ภาพ: 'mailhog/mailhog:ล่าสุด'
        พอร์ต:
            - '21001:8025'

    php-fpm:
        สร้าง: phpdocker/php-fpm
        working_dir: /application2
        ปริมาณ:
            - '.:/application2'
            - './phpdocker/php-fpm/php-ini-overrides.ini:/etc/php/8.1/fpm/conf.d/99-overrides.ini'
เครือข่าย:
    ค่าเริ่มต้น:
        ภายนอก:
            ชื่อ: nginx-proxy

Score:1
ธง fi

ฉันได้ค้นพบคำตอบด้วยตัวเอง เผื่อมีใครเจอสถานการณ์เดียวกัน: สำหรับ docker-compose.yml ของแต่ละเว็บไซต์ เครือข่ายอิสระจะต้องตั้งค่า

ก่อนอื่นฉันเปลี่ยนชื่อเครือข่าย nginx-proxy จาก "default" เป็น "proxy" จากนั้นสำหรับแต่ละเว็บไซต์ ให้ใช้เครือข่ายอิสระ (ฉันเรียกว่า "แอป") เพื่อเชื่อมโยงแต่ละบริการที่ใช้ในคอนเทนเนอร์ บริการ nginx จำเป็นต้องใช้เครือข่ายพร็อกซีด้วย

เว็บไซต์นักเทียบท่า-compose.yml:

รุ่น: '3.1'
บริการ:
    แอปของฉัน:
        เครือข่าย: 
            - แอป
            - หนังสือมอบฉันทะ
        ภาพ: 'nginx:อัลไพน์'
        ปริมาณ:
            - '.:/application2'
            - './phpdocker/nginx/nginx.conf:/etc/nginx/conf.d/default.conf'
        รีสตาร์ท: เสมอ
        สิ่งแวดล้อม:
            - VIRTUAL_HOST=websitetwo.tk
            - VIRTUAL_PORT=80
            - LETSENCRYPT_HOST=websitetwo.tk
        เปิดเผย:
            - 80
    เมลฮ็อก:
        เครือข่าย: 
            - แอป
        ภาพ: 'mailhog/mailhog:ล่าสุด'
        พอร์ต:
            - '21001:8025'

    php-fpm:
        เครือข่าย: 
            - แอป
        สร้าง: phpdocker/php-fpm
        working_dir: /application2
        ปริมาณ:
            - '.:/application2'
            - './phpdocker/php-fpm/php-ini-overrides.ini:/etc/php/8.1/fpm/conf.d/99-overrides.ini'
เครือข่าย:
    พร็อกซี:
        ภายนอก:
            ชื่อ: nginx-proxy
    แอป:

โพสต์คำตอบ

คนส่วนใหญ่ไม่เข้าใจว่าการถามคำถามมากมายจะปลดล็อกการเรียนรู้และปรับปรุงความสัมพันธ์ระหว่างบุคคล ตัวอย่างเช่น ในการศึกษาของ Alison แม้ว่าผู้คนจะจำได้อย่างแม่นยำว่ามีคำถามกี่ข้อที่ถูกถามในการสนทนา แต่พวกเขาไม่เข้าใจความเชื่อมโยงระหว่างคำถามและความชอบ จากการศึกษาทั้ง 4 เรื่องที่ผู้เข้าร่วมมีส่วนร่วมในการสนทนาด้วยตนเองหรืออ่านบันทึกการสนทนาของผู้อื่น ผู้คนมักไม่ตระหนักว่าการถามคำถามจะมีอิทธิพลหรือมีอิทธิพลต่อระดับมิตรภาพระหว่างผู้สนทนา