Score:0

ฉันจะกำหนดค่าเซิร์ฟเวอร์ nginx ให้ยอมรับโดเมนย่อยและพอร์ตต่างๆ ได้อย่างไร

ธง mx

ฉันมีเซิร์ฟเวอร์ที่ทำงานบน Ubuntu/Nginx ฉันมีโดเมนย่อยที่ทำงานจากพอร์ตภายในที่แตกต่างกัน ฉันต้องการเปิดเผยแอปพลิเคชันหนึ่งต่อสาธารณะ แต่ไม่เชื่อมโยงกับชื่อโดเมน/เซิร์ฟเวอร์ใดๆ

ด้านล่างนี้เป็นไฟล์กำหนดค่าของฉัน:

เซิร์ฟเวอร์ {
    server_name app.example.com www.app.example.com;
    access_log /home/hub-app/logs/app.example.com.access.log;
    
    ที่ตั้ง / {
        proxy_set_header โฮสต์ $host;
        proxy_pass http://127.0.0.1:8082;
        ปิด proxy_redirect;
        proxy_set_header อัพเกรด $http_upgrade;
        proxy_set_header การเชื่อมต่อ 'อัปเกรด';      
        proxy_cache_bypass $http_upgrade;       
        proxy_http_version 1.1;     
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-ส่งต่อ-สำหรับ $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme; 
    }

    ฟัง 443 ssl; 
    ssl_certificate /etc/letsencrypt/live/app.example.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/app.example.com/privkey.pem;
    รวม /etc/letsencrypt/options-ssl-nginx.conf;
    ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem;


}   

เซิร์ฟเวอร์ {
    server_name example.com www.example.com;
    access_log /home/hub-public/logs/example.com.access.log;
    
    ที่ตั้ง / {
        proxy_set_header โฮสต์ $host;
        proxy_pass http://127.0.0.1:8081;
        ปิด proxy_redirect;
        proxy_set_header อัพเกรด $http_upgrade;
        proxy_set_header การเชื่อมต่อ 'อัปเกรด';      
        proxy_cache_bypass $http_upgrade;       
        proxy_http_version 1.1;     
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-ส่งต่อ-สำหรับ $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme; 
    }

    ฟัง 443 ssl;
    ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem; 
    ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem; 
    รวม /etc/letsencrypt/options-ssl-nginx.conf;
    ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; 

}

ด้านบนใช้งานได้ดีและชี้ไปที่โดเมนที่ระบุ เช่น example.com และ app.example.com ตอนนี้ฉันต้องการเพิ่มเซิร์ฟเวอร์เสมือนอีกเครื่องเพื่อรันที่ MY_PUBLIC_IP:8080 ไม่ควรเข้าถึงพอร์ต 8080 บนโดเมนอื่น เช่น example.com:8080/app.example.com:8080 ไม่ควรมีอยู่

djdomi avatar
za flag
ใช้เป็น server_name the ip
Score:0
ธง ru

คุณสามารถใช้ได้ default_server.

Nginx จะประกาศเซิร์ฟเวอร์นั้นเป็นเซิร์ฟเวอร์เริ่มต้น หลังจากนั้น Nginx จะใช้เซิร์ฟเวอร์เริ่มต้นในการจัดการคำขอเมื่อส่วนหัวของโฮสต์ HTTP ยังไม่ตรงกันกับบล็อกเซิร์ฟเวอร์อื่นๆ

default_server ใน Nginx คืออะไร

ตัวอย่าง:

เซิร์ฟเวอร์ {
    ฟัง 8080 default_server;
    
    รูท /www/default;
        
    ที่ตั้ง / {
        ดัชนี index.html;
    }
}


ฉันใช้มันกับบอทสแกนเนอร์ honeypot และสตรีมอีโมจิเซ่อ ๆ ถ้าพวกเขากำลังมองหา phpAdmin หรืออะไรทำนองนั้น :)

Score:0
ธง gr

ฉันไม่คิดว่าคำตอบของ @Klamberext จะตอบคำถามจริงๆ นั่นคือเว็บเซิร์ฟเวอร์ nginx มีไฟล์ เซิร์ฟเวอร์เริ่มต้น แนวคิด. หน้าเอกสารอย่างเป็นทางการเกี่ยวกับเรื่องนี้สามารถพบได้ที่นี่: nginx ประมวลผลคำขออย่างไร. อย่างไรก็ตาม เซิร์ฟเวอร์ตัวใดตัวหนึ่งที่บล็อกการฟังบนอินเทอร์เฟซ/พอร์ตของเครือข่ายบางอย่างจะทำหน้าที่เป็นค่าเริ่มต้นเสมอ หากคุณไม่ระบุการบล็อกเซิร์ฟเวอร์นั้นอย่างชัดเจน จะเป็นการบล็อกเซิร์ฟเวอร์แรกสุดในการกำหนดค่าของคุณ นั่นหมายความว่าเซิร์ฟเวอร์ของคุณบล็อกด้วย server_name app.example.com www.app.example.com; บรรทัดจะเป็นบล็อกเซิร์ฟเวอร์เริ่มต้นสำหรับคำขอใด ๆ ที่มาจากพอร์ต 443 TCP ซึ่งให้บริการคำขอใด ๆ ที่มี HTTP เจ้าภาพ ส่วนหัวจะไม่ตรงกัน ตัวอย่าง.คอม หรือ www.example.com (หรือถ้าจะไม่มี เจ้าภาพ ส่วนหัวเลย).

ตามที่ @Klamberext พูดไปแล้ว แนวทางปฏิบัติทั่วไปคือการกำหนดบล็อกเซิร์ฟเวอร์ stub เพื่อตรวจจับคำขอทั้งหมดที่ เจ้าภาพ ส่วนหัว HTTP ไม่ตรงกับโดเมนใดๆ ที่คุณให้บริการ สามารถดูตัวอย่างได้ที่ นี้ ดังนั้นคำตอบ โดยปกติบล็อกเซิร์ฟเวอร์ดังกล่าวประกอบด้วย กลับ 444; คำสั่งซึ่งเป็นรหัสส่งคืน nginx พิเศษเพื่อปิดการเชื่อมต่อทันทีอย่างไรก็ตาม ดูเหมือนว่าคุณต้องการสิ่งที่ตรงกันข้าม และคุณจะต้องใช้บล็อกเซิร์ฟเวอร์สองบล็อกเพื่อดำเนินการให้สำเร็จ ดังที่ได้กล่าวไปแล้ว บล็อกเซิร์ฟเวอร์เดียวที่ฟังบนพอร์ต TCP 8080 จะทำหน้าที่เป็นบล็อกเริ่มต้นไม่ว่าจะเป็นอะไรก็ตาม เจ้าภาพ ส่วนหัวตั้งค่าเป็น:

เซิร์ฟเวอร์ {
    ฟัง 8080;
    server_name example.com www.example.com app.example.com www.app.example.com;
    กลับ 444;
}
เซิร์ฟเวอร์ {
    ฟัง 8080 default_server;
    ... การกำหนดค่าของคุณที่นี่
}

เป็นทางเลือก คุณสามารถตรวจสอบ เจ้าภาพ ค่า header ภายในบล็อกเซิร์ฟเวอร์ของคุณ เช่น เพื่อบล็อก an ตัวอย่าง.คอม โดเมนและโดเมนย่อยใดๆ ของโดเมน:

เซิร์ฟเวอร์ {
    ฟัง 8080;
    ถ้า ($http_host ~ \.?example\.com$) { ส่งคืน 444; }
    ... การกำหนดค่าของคุณที่นี่
}

โพสต์คำตอบ

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