Score:0

Nginx ให้ความสำคัญกับโดเมนย่อยตามลำดับตัวอักษรของไฟล์ปรับแต่ง

ธง in

TLDR: Nginx ให้ความสำคัญกับโดเมนย่อยตามลำดับตัวอักษรของไฟล์กำหนดค่า และฉันต้องการทราบวิธีป้องกันไม่ให้สิ่งนี้เกิดขึ้น นี่คือ คล้ายกัน ถึง นี้ คำถาม แต่ฉันสนใจที่จะปรับปรุงระบบของฉันมากกว่า

ฉัน (มี) สองส่วนบนเซิร์ฟเวอร์ของฉัน: ส่วนหนึ่งสำหรับเว็บไซต์แบบสแตติก และอีกส่วนหนึ่งสำหรับอินสแตนซ์ dokuwiki ของฉัน ฉันต้องการให้โหลด dokuwiki เมื่อมีคนไปที่ example.com และเว็บไซต์แบบคงที่โหลดเมื่อมีคนไปที่ static.example.com สุดท้ายนี้ ฉันต้องการให้ wiki.example.com ชี้ไปที่ dokuwiki เสมอ ในกรณีที่ค่าดีฟอลต์เปลี่ยนไป

เพื่อให้บรรลุสิ่งนี้ ฉันมีไฟล์สองไฟล์ใน /etc/nginx/sites-available

โดกุวิกิ (นี่เป็นเพียงการกำหนดค่า dokuwiki ทั่วไปที่มี certbot ทำงานอยู่)

เซิร์ฟเวอร์ {
    ถ้า ($host = www.example.com) {
        ส่งคืน 301 https://$host$request_uri;
    } # จัดการโดย Certbot


    ถ้า ($host = example.com) {
        ส่งคืน 301 https://$host$request_uri;
    } # จัดการโดย Certbot


    ถ้า ($host = wiki.example.com) {
        ส่งคืน 301 https://$host$request_uri;
    } # จัดการโดย Certbot

    ฟัง 80;
    ฟัง [::]:80;
    server_name wiki.example.com example.com www.example.com;
    ส่งคืน 301 https://$server_name$request_uri;
}
 
เซิร์ฟเวอร์ {
    ฟัง [::]:443 ssl;
    ฟัง 443 ssl;
 
    server_name example.com www.example.com wiki.example.com;
 
    # ขนาดไฟล์อัพโหลดสูงสุดคือ 4MB - เปลี่ยนตามความจำเป็น
    client_max_body_size 4M;
    client_body_buffer_size 128k;
 
    ราก /dokuwiki/dokuwiki-2020-07-29;
    ดัชนี doku.php;
 
    #อย่าลืมแสดงความคิดเห็นด้านล่างเมื่อคุณกำลังติดตั้งและยกเลิกการแสดงความคิดเห็นเมื่อเสร็จสิ้น
    ตำแหน่ง ~ /(conf/|bin/|inc/|install.php) { ปฏิเสธทั้งหมด; }
 
    #Support สำหรับ X-Accel-เปลี่ยนเส้นทาง
    ตำแหน่ง ~ ^/data/ { ภายใน ; }
 
    ตำแหน่ง ~ ^/lib.*\.(js|css|gif|png|ico|jpg|jpeg)$ {
        หมดอายุ 365d;
    }
 
    ตำแหน่ง / { try_files $uri $uri/ @dokuwiki; }
 
    ที่ตั้ง @dokuwiki {
        # เขียนซ้ำ "doku.php/" จาก URL หากคุณตั้งค่า userwrite เป็น .htaccess ในหน้ากำหนดค่า dokuwiki
        เขียนใหม่ ^/_media/(.*) /lib/exe/fetch.php?media=$1 ล่าสุด;
        เขียนใหม่ ^/_detail/(.*) /lib/exe/detail.php?media=$1 ล่าสุด;
        เขียนใหม่ ^/_export/([^/]+)/(.*) /doku.php?do=export_$1&id=$2 สุดท้าย;
        เขียนใหม่ ^/(.*) /doku.php?id=$1&$args สุดท้าย;
    }
 
    ตำแหน่ง ~ \.php$ {
        try_files $uri $uri/ /doku.php;
        รวม fastcgi_params;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        fastcgi_param REDIRECT_STATUS 200;
        fastcgi_pass ยูนิกซ์:/var/run/php/php7.3-fpm.sock;
        # fastcgi_pass ยูนิกซ์:/var/run/php5-fpm.sock; #php เวอร์ชั่นเก่า
    }
    ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem; # จัดการโดย Certbot
    ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem; # จัดการโดย Certbot
}

คงที่

เซิร์ฟเวอร์ {
    รูท /var/www/example;
    ดัชนี index.html index.htm index.nginx-debian.html;
    server_name static.example.com;
    ที่ตั้ง / {
        try_files $uri $uri/ =404;
    }

    ฟัง [::]:443 ssl ipv6only=เปิด; # จัดการโดย Certbot
    ฟัง 443 ssl; # จัดการโดย Certbot
    ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem; # จัดการโดย Certbot
    ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem; # จัดการโดย Certbot
    รวม /etc/letsencrypt/options-ssl-nginx.conf; # จัดการโดย Certbot
    ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # จัดการโดย Certbot
}

ระบบนี้ทำงานได้ตรงตามที่ฉันคาดไว้ อย่างไรก็ตาม ฉันได้เพิ่ม commafeed ลงในเซิร์ฟเวอร์ของฉันแล้ว เป้าหมายของฉันคือการเข้าถึง commafeed ผ่าน rss.example.com Commafeed ทำงานบนพอร์ต 8082 ดังนั้นฉันจึงทำ proxy_pass ไปยัง example.com/8082 ในไฟล์นี้

คอมมาฟีด

เซิร์ฟเวอร์ {
    ฟัง 443;
    ฟัง [::]:443;
    
    รูท /var/www/commafeed;
    ดัชนี index.html index.htm index.nginx-debian.html;
    ชื่อเซิร์ฟเวอร์ rss.example.com www.rss.example.com;
    ที่ตั้ง / {
        proxy_pass http://example.com:8082/;
        ปิด proxy_buffering;
        proxy_set_header โฮสต์ $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-ส่งต่อ-สำหรับ $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
    }
}

เมื่อฉันทำสิ่งนี้ ฉันได้รับการรีเซ็ตการเชื่อมต่อบนเบราว์เซอร์ของฉันสำหรับ ทั้งหมด โดเมน example.com และบันทึกข้อความแสดงข้อผิดพลาดนี้

ตัวอย่าง:/etc/nginx/sites-available# tail -f /var/log/nginx/error.log -n 0
28/09/2021 03:10:36 [ข้อผิดพลาด] 32479#32479: *2317 ไม่มีการกำหนด "ssl_certificate" ในเซิร์ฟเวอร์ที่ฟังพอร์ต SSL ขณะจับมือ SSL ลูกค้า: <ที่อยู่ ipv6 ของฉัน> เซิร์ฟเวอร์: [::]: 443
28/09/2021 03:10:36 [ข้อผิดพลาด] 32479#32479: *2318 ไม่มีการกำหนด "ssl_certificate" ในเซิร์ฟเวอร์ที่ฟังพอร์ต SSL ขณะจับมือ SSL ลูกค้า: <ที่อยู่ ipv6 ของฉัน> เซิร์ฟเวอร์: [::]: 443

อย่างไรก็ตาม เมื่อฉันเปลี่ยนชื่อไฟล์เป็น "zcommafeed" ทุกอย่างก็ทำงานได้ตามที่ตั้งใจไว้ นั่นคือ โดเมนย่อยเก่าทั้งหมดทำงานเหมือนที่เคยทำมา เช่นเดียวกับ rss.example.com ที่ชี้ไปที่ commafeed

ขณะนี้ การทำงานนี้ดูเหมือนจะบอกเป็นนัยว่ามีวิธีที่ดีกว่าในการทำเช่นนี้ซึ่งไม่เกี่ยวข้องกับการใส่ใจกับลำดับตัวอักษรของไฟล์ ฉันยังใหม่กับ NGINX ดังนั้นฉันจึงยินดีเป็นอย่างยิ่งสำหรับความช่วยเหลือ!!

Score:2
ธง us

ข้อความแสดงข้อผิดพลาดระบุอย่างชัดเจนว่าการกำหนดค่าไม่มีใบรับรอง TLS สำหรับ rss.example.com. สร้างใบรับรอง / คู่คีย์ที่เหมาะสมสำหรับ rss.example.com และ www.rss.example.comจากนั้นการกำหนดค่าจะทำงานอย่างถูกต้อง

Michael Hampton avatar
cz flag
และคำสั่ง `listen` ไม่รวม `ssl`
Score:0
ธง za

Nginx กำลังจัดเรียงไฟล์ที่มีโฮสต์เสมือนอยู่ด้วย เนื่องจากใช้งานได้สะดวกกว่าและเข้าใจตรรกะของการเลือกค่าเริ่มต้น - และนี่จะเป็นไฟล์รวม vhost แรกเมื่อจัดเรียงตามตัวอักษร

ในความเป็นจริงคุณกำลังมองหา ค่าเริ่มต้น ตัวเลือกที่จะ ฟัง คำสั่งที่ใช้ในการยุติ เว็บไซต์อื่นทั้งหมด ไม่ตรงกับ ชื่อเซิร์ฟเวอร์ กล่าวถึงในของคุณ เซิร์ฟเวอร์ {} บล็อก

เพิ่ม ค่าเริ่มต้น ตัวเลือกในการ ฟัง คำสั่งของโฮสต์เสมือนที่ควรยุติคำขอทั้งหมดหากไม่มี ชื่อเซิร์ฟเวอร์ จับคู่

โพสต์คำตอบ

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