เซิร์ฟเวอร์หลายเครื่องจากโฮสต์เดียวกรองโดเมนและโดเมนย่อยและการแปลพอร์ต -NGINX


0

ฉันยังใหม่กับ NGINX ไม่เคยแตะต้องเลย แต่ฉันอยู่ในสถานการณ์เล็ก ๆ น้อย ๆ ที่มองหาจุดออนไลน์ที่จำเป็นต้องใช้

สถานการณ์ของฉันคือ:

ฉันมี 1 เซิร์ฟเวอร์ (Windows Server) และฉันต้องการเรียกใช้เซิร์ฟเวอร์ FTP สองเครื่องและเว็บเซิร์ฟเวอร์สองเครื่อง ตอนนี้ฉันรู้ว่าฉันไม่สามารถโฮสต์สองแอปพลิเคชันบนพอร์ตเดียวกัน (พูดพอร์ต 80 สำหรับทั้งเว็บเซิร์ฟเวอร์และอื่น ๆ ) และดังนั้นฉันจะต้องใส่พวกเขาในพอร์ตที่แตกต่างกัน

สำหรับสถานการณ์เช่นนี้ช่วยบอกฉันมีสองโดเมนย่อยและone.example.com ทั้งโดเมนย่อยเหล่านี้ชี้ไปที่อยู่two.example.com IP ของเซิร์ฟเวอร์ของฉัน 1.2.3.4ในสถานการณ์ปกติใด ๆ การเข้าถึงเว็บเซิร์ฟเวอร์และเซิร์ฟเวอร์ FTP อย่างใดอย่างหนึ่งผ่านโดเมนย่อยทั้งสองจะเป็นไปได้บนพอร์ตต่าง ๆ ที่ฉันได้กำหนดไว้ นี่ไม่ใช่สิ่งที่ฉันต้องการ

สิ่งที่ฉันต้องการทำคือมีเซิร์ฟเวอร์ FTP หนึ่งเซิร์ฟเวอร์และหนึ่งเว็บเซิร์ฟเวอร์ในโดเมนย่อยหนึ่งโดเมนและที่พอร์ต 21 และ 80 และเซิร์ฟเวอร์ FTP และเซิร์ฟเวอร์อื่น ๆ บนโดเมนย่อยอื่นและอีกครั้งที่พอร์ต 21 และ 80

เท่าที่ฉันสามารถบอกได้ฉันต้องทำให้คุณสามารถเข้าถึงบางสิ่ง (ตัวกรอง) ในบางโดเมนย่อยและพอร์ตของสิ่งเหล่านั้น (21 และ 80) ได้รับการแปลไปยังพอร์ตอื่น ๆ บนเซิร์ฟเวอร์ (เท่าที่คุณสามารถ ' ไม่มีแอพพลิเคชั่นสองตัวที่อยู่ในพอร์ตเดียว)

ถ้าฉันทำได้ฉันต้องการรัน NGINX บน windows server แต่ถ้าไม่ใช่ฉันจะต้องใช้มันในบางอย่างเช่น Raspberry Pi ของฉันแม้ว่าจะต้องให้ Pi ของฉันเป็นเกตเวย์ระหว่างอินเทอร์เน็ตและเครือข่ายของฉัน

แก้ไข: มันเป็นสิ่งสำคัญสำหรับฉันที่จะต้องทราบที่นี่ว่าฉันตั้งใจจะทำงานมากกว่า FTP และ HTTP บนเซิร์ฟเวอร์นี้ดังนั้นการแปลพอร์ตและการกรองโดเมนต้องทำงานกับซ็อกเก็ตแอปพลิเคชันประเภทใดไม่ใช่แค่ FTP, HTTP เป็นต้นหาก NGINX ไม่ใช่โซลูชันโซลูชันการทำงานอื่น ๆ ก็โอเค


แม้ว่าคุณจะสามารถใช้ reverse proxy หน้าเซิร์ฟเวอร์ของคุณสำหรับ http เพื่อกำหนด URL เฉพาะไปยังที่อยู่ IP และพอร์ตเฉพาะคุณจะไม่สามารถทำอะไรกับ FTP ได้ FTP ไม่มีส่วนหัวของโฮสต์เหมือน HTTP
Appleoddity

@Appleoddity ความตั้งใจที่นี่คือการเปลี่ยนพอร์ต "โง่" ข้อมูลใด ๆ ที่มาในโดเมนย่อยสำหรับพอร์ต 21 จะได้รับการส่งไปยังพอร์ตอื่นบนเซิร์ฟเวอร์โดยไม่คำนึงถึงสิ่งที่จะถูกส่งและรับ
DevelopedLogic

คุณกำลังพูดถึงผู้รับมอบฉันทะย้อนกลับหรือเพียง virtualhosts?
Geek

ไม่มีอะไรในระบบเสมือนที่นี่ดังนั้นฉันจึงถือว่าผู้รับมอบฉันทะ @JourneymanGeek
DevelopedLogic

ไม่ไม่. โดยทั่วไปแล้วโฮสต์เสมือนของ "ถ้าโฮสต์คือ A, ทำ X, ถ้าโฮสต์คือ B, ทำ Y"
Journeyman Geek

คำตอบ:


0

ngnix เป็นเรื่องง่ายมากใน linux - อย่างน้อยเอกสารประกอบ ฉันมีความรู้สึกว่าเราจะต้องเริ่มต้นตั้งแต่เริ่มต้น โดยทั่วไปแล้ว ngnix จะทำงานนอกกรอบแม้ว่าคุณจะต้องตั้งค่าสิ่งต่าง ๆ เช่น php แยกกัน - ไม่มี mod proxy ที่เทียบเท่า

ในใด ๆเซิร์ฟเวอร์ HTTP ที่ทันสมัยมีรสชาติของ virtualhosts บาง ใน ngnix คุณสามารถตั้งให้เป็นไฟล์เดียวหรือแยกไฟล์ได้ ประเภทนี้ใช้ไม่ได้กับ FTP - แต่มีวิธีแก้ไขปัญหา ( Ngnix เรียกว่าบล็อกเซิร์ฟเวอร์ แต่แตกต่างกัน )

เพียงมีบัญชีแยกเป็น ftp ที่มีชื่อผู้ใช้รหัสผ่านและไดเรกทอรี rood ที่แตกต่างกัน

Virtualhosts ใช้งานได้เฉพาะบน http และ https และโดยทั่วไปเป็นวิธีการควบคุมปริมาณการใช้งานในโดเมนที่แตกต่างกันไปยังเส้นทางที่แตกต่างกันทำให้คุณสามารถเรียกใช้บริการต่างๆในไดเรกทอรีรูทต่าง ๆ ตามชื่อโฮสต์ ตัวอย่างเช่นคุณสามารถเรียกใช้ wordpress สองอินสแตนซ์บนเซิร์ฟเวอร์เดียวกันโดยมีไฟล์แยกกันเป็นส่วนใหญ่

ฉันขี้เกียจ - ฉันมีไฟล์กำหนดค่าหนึ่งไฟล์ต่อโดเมน หากคุณใช้งานบน windows ให้ค้นหาเอกสารที่เหมาะสมเพื่อดูรายละเอียด

คุณจะต้องค้นหาตำแหน่งของไฟล์กำหนดค่าต่อไซต์ - ของฉันใน / etc / ngnix / sites-available และไฟล์เหล่านี้จะเชื่อมโยงกับไซต์ที่เปิดใช้งาน สิ่งนี้อาจขึ้นอยู่กับแพลตฟอร์ม

คุณจะมักจะมีการติดตั้งเริ่มต้นที่มีสติและควรจะทำงาน มันน่าเบื่อและคุณสามารถอ่านมันเพื่อทำความเข้าใจว่ามีตัวเลือกอะไรบ้าง

คุณสามารถแก้ไขได้ (ฉันไม่แนะนำ) หรือสร้างไฟล์กำหนดค่าต่อไซต์ในโฟลเดอร์เดียวกัน นี่คือตัวอย่างของสิ่งที่ฉันใช้ สิ่งนี้จะแทนที่ค่าเริ่มต้น

server {
        listen 80;
        listen [::]:80;


        root /var/www/html/new;

        # Add index.php to the list if you are using PHP
        index index.html index.htm index.nginx-debian.html index.php;

        server_name new.example.com;

        location / {
                # First attempt to serve request as file, then
                # as directory, then fall back to displaying a 404.
                try_files $uri $uri/ =404;
        }

        # pass the PHP scripts to FastCGI server via unix socks
        #
        location ~ \.php$ {
                include snippets/fastcgi-php.conf;

                fastcgi_pass unix:/run/php/php7.0-fpm.sock;
        }

        # deny access to .htaccess files, if Apache's document root
        # concurs with nginx's one
        #
        location ~ /\.ht {
                deny all;
        }
}

ดังนั้นมากหรือน้อยฉันบอกให้ฟังพอร์ต 80 บน ipv4 และ 6 บอกชื่อโฮสต์ให้ฟังและอื่น ๆ ที่เกี่ยวข้องกับ php

ถ้าฉันเปลี่ยนรูทและสลับ new.example.com ด้วย new2.example.com และเปลี่ยนรูทมันจะส่งคำขอใด ๆ ไปที่ new2.example.com ไปยังเนื้อหาในรูทใหม่ ตัวอย่างเช่นคุณสามารถเรียกใช้ wordpress 2 สำเนาบนเซิร์ฟเวอร์เดียวกันกับโดเมนที่ต่างกัน ฉันสร้างหนึ่งในนั้นด้วย server_name และรูทต่อโดเมนในไซต์ที่เปิดใช้งานเชื่อมโยงไปยังไซต์ที่เปิดใช้งาน (อาจทำงานแตกต่างกันใน windows) และโหลด nginix ของฉันใหม่

สมมติว่าคุณพยายามพร็อกซีคุณจะมีเซิร์ฟเวอร์อย่างน้อยหนึ่งพอร์ตในพอร์ตที่ต่างกัน ngnix อยู่ข้างหน้ากับการรับส่งข้อมูลโดยตรง

server {
        listen 80;
        listen [::]:80;
        server_name matrix.example.com;



        location /_matrix {
        proxy_pass http://localhost:8008;
        proxy_set_header X-Forwarded-For $remote_addr;
 }

}

ลองพิจารณาไฟล์ปรับแต่งนี้ - ฉันไม่แน่ใจว่ามันจะใช้งานได้จริง (ฉันเรียกใช้ HTTPS รุ่นที่เปิดใช้งานของสิ่งนี้) แต่นั่นคือสิ่งที่เอกสารนั้นมีไว้สำหรับ มันจะฟังในพอร์ต 80 สำหรับโดเมน matrix.example.com


OP ถามวิธีเรียกใช้หลายอินสแตนซ์บนพอร์ตที่ต่างกัน คุณกำลังแนะนำสิ่งนี้เป็นวิธีการอื่นหรือไม่?
Appleoddity

ได้! และพยายามอธิบายว่าแต่ละสิ่งทำอะไร
Journeyman Geek

@ JourneymanGeek นี่คือสิ่งที่ฉันต้องการจากมุมมองของเว็บเซิร์ฟเวอร์ แต่ความตั้งใจของฉันที่จะวาง FTP ไว้ในที่นั่นจะเป็นแบบสแตนด์อะโลนสำหรับแอปพลิเคชันอื่น ๆ ตัวอย่างเช่นฉันอาจต้องการเรียกใช้เซิร์ฟเวอร์เกมหลายตัวเซิร์ฟเวอร์ telnet / SSH และอื่น ๆ ดังนั้นฉันจึงต้องการให้เฉพาะแอปพลิเคชั่นเซิร์ฟเวอร์บางตัวเท่านั้นที่สามารถเข้าถึงได้ในโดเมนย่อยบางแห่งและพอร์ตเฉพาะบนโดเมนย่อยเหล่านั้น ฉันไม่ได้มองแค่แอพพลิเคชั่นที่ใช้ HTTP
DevelopedLogic

ที่ได้รับยุ่งยากอย่างรวดเร็ว เซิร์ฟเวอร์จะต้องตระหนักถึงชื่อโฮสต์เพื่อที่จะทำงาน serverfault.com/questions/255055/…เป็นสิ่งที่ฉันอ้างถึง แต่บันทึก srv อาจไม่ทำงานในทุกกรณี HTTP สร้างขึ้นเพื่อสิ่งที่คุณต้องการดังนั้นจึงใช้งานได้ โปรโตคอลอื่น ๆ อาจมีหรือไม่มีก็ได้
Journeyman Geek

@journeymanGeek ระเบียน SRV ดูเหมือนจะเป็นสิ่งที่ลูกค้าเชื่อมต่อต้องฟัง สิ่งที่ฉันกำลังมองหาจริงๆคือระบบกรองประเภทไฟร์วอลล์บางประเภท แต่เป็นเช่น NAT แปลพอร์ตที่ร้องขอบนโดเมนย่อยที่ร้องขอไปยังแอปพลิเคชันในเครื่องเดียวและบล็อกคำขอหากพอร์ตที่เข้าถึงไม่ได้รับอนุญาตให้เข้าถึง ในโดเมนย่อย
DevelopedLogic
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.