ProxyPass: เปลี่ยนเส้นทางไดเรกทอรี URL ไปยังพอร์ตที่ไม่ได้มาตรฐาน


13

ฉันค้นหา Google และไม่ประสบความสำเร็จในการหาคำตอบ ฉันใช้เซิร์ฟเวอร์บน Ubuntu และมีโปรแกรมที่ติดตั้งซึ่งใช้พอร์ตที่ไม่ได้มาตรฐานต่างๆ แต่ละอันใช้พอร์ตที่แตกต่างกันในกรณีของฉันคือ 9090, 9091, 9092, 9093 และ 9094 ฉันตั้งเซิร์ฟเวอร์ apache และมีชื่อโดเมนที่สามารถเข้าถึงเซิร์ฟเวอร์ของฉันแทนที่จะต้องพิมพ์ที่อยู่ IP ของฉัน สิ่งที่ฉันกำลังมองหาคือวิธีการสร้างไดเรกทอรีที่สามารถชี้ไปยังพอร์ตต่างๆที่ฉันได้ระบุไว้ ฉันต้องการสิ่งที่ชอบ

https://www.mydomain.com/app1
https://www.mydomain.com/app2
http://www.mydomain.com/app3

พอร์ตบางตัวใช้งานผ่าน SSL บางตัวไม่ใช่ฉันเพิ่งวางตามลำดับ (9090-9094) เพื่อความสะดวกในการใช้งานในส่วนของฉัน ฉันต้องการให้ / app1 ชี้ไปที่พอร์ต SSL 9090, / app2 เพื่อชี้ไปที่พอร์ต SSL 9091 และ / app3 เพื่อชี้ไปที่พอร์ตที่ไม่ใช่ SSL 9092 มีวิธีง่าย ๆ ใช่ไหม ฉันได้ลองเพิ่ม ProxyPass และสิ่งที่ชอบโดยอ้างอิงจากโพสต์อื่น ๆ แต่ไม่มีอะไรทำงาน ฉันจำเป็นต้องเพิ่มเว็บไซต์ใหม่หรือไม่?

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

ฉันขอโทษสำหรับแท็กที่ไม่ถูกต้องและขอขอบคุณที่คุณสละเวลาอ่านโพสต์และความช่วยเหลือที่คุณสามารถให้ได้

แก้ไข: เพื่อความกระจ่างแอปพลิเคชันสามารถเข้าถึงได้ผ่านทางhttps://www.mydomain.com:9090อื่น ๆ ฉันต้องการวิธีการใช้https://www.mydomain.com/appNameเพื่อไปยังตำแหน่ง / หน้าเดียวกันที่เผยแพร่โดยแอปพลิเคชันเหล่านั้น

แก้ไข 2: จาก / etc / apache2 / sites-available / default

<VirtualHost *:80>
    ServerAdmin webmaster@localhost

    DocumentRoot /var/www
    <Directory />
        Options FollowSymLinks
        AllowOverride None
    </Directory>
    <Directory /var/www/>
        Options Indexes FollowSymLinks MultiViews
        AllowOverride None
        Order allow,deny
        allow from all
    </Directory>

    ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/
    <Directory "/usr/lib/cgi-bin">
        AllowOverride None
        Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
        Order allow,deny
        Allow from all
    </Directory>

    ErrorLog ${APACHE_LOG_DIR}/error.log

    # Possible values include: debug, info, notice, warn, error, crit,
    # alert, emerg.
    LogLevel warn

    CustomLog ${APACHE_LOG_DIR}/access.log combined

    ProxyRequests Off
    <Proxy *>
        Order deny,allow
        Allow from all
    </Proxy>
    ProxyPass /app1 https://localhost:9090/
    ProxyPassReverse /app1 https://localhost:9090/
</VirtualHost>

คุณสามารถโพสต์เอาท์พุทของคำสั่งการกำหนดค่าที่คุณใช้ในการตั้งค่านี้ได้หรือไม่? หากพวกเขาอยู่ภายใน vhost คุณสามารถโพสต์ vhost ทั้งหมดได้หรือไม่
Marcos Velazquez

ตั้งค่าอะไร พอร์ตหรือไม่ พอร์ตต่าง ๆ ได้รับการตั้งค่าผ่าน UI ของโปรแกรมที่เกี่ยวข้องและฉันกำลังมองหาวิธีหลีกเลี่ยงการพิมพ์ในพอร์ตต่างๆเมื่อเข้าถึงแต่ละแอปพลิเคชันบนเซิร์ฟเวอร์ของฉัน ฉันสามารถขุดผ่านการใช้งานเพื่อดูสิ่งที่ฉันสามารถหา แต่พอร์ตมักจะเพียงแค่เก็บไว้ในแฟ้ม config.ini
Serneum

ไม่เลย ฉันหมายความว่าถ้าคุณใช้ ProxyPass และสิ่งอื่น ๆ คุณต้องวางมันไว้ใน vhost ใช่มั้ย ถ้าเป็นเช่นนั้นคุณสามารถโพสต์เนื้อหา vhost ทั้งหมดถ้าเป็นไปได้? ie <VirtualHost 10.0.0.1:80 > ServerName server.domain.com DocumentRoot /usr/local/apache/htdocs </VirtualHost>
Marcos Velazquez

ฉันเลิกทำการเปลี่ยนแปลงส่วนใหญ่เพื่อรับกระดานชนวนที่สะอาดก่อนขอความช่วยเหลือ ฉันเพียงแค่เพิ่ม etc / apache2 / เว็บไซต์ที่มีอยู่ไฟล์ / / เริ่มต้นที่ผมมีและผมเพิ่มสิ่งที่พร็อกซีที่สิ้นสุดขึ้นอยู่กับสิ่งที่ฉันได้เห็นที่เว็บไซต์อื่น ๆ ต่างๆ / การค้นหา
Serneum

คำตอบ:


13

ตรวจสอบให้แน่ใจว่าโมดูล apache ต่อไปนี้ได้รับการติดตั้งและโหลดแล้ว:

mod_proxy
mod_proxy_http
mod_ssl

คุณสามารถตรวจสอบผ่านการเรียกใช้คำสั่งต่อไปนี้เป็นราก (สมมติว่า httpd อยู่ใน $ PATH ของคุณ)

httpd -t -D DUMP_MODULES

หลังจากนั้นให้ลองเปลี่ยนการกำหนดค่าของคุณเป็นสิ่งต่อไปนี้:

ProxyRequests Off
<Proxy *>
    Order deny,allow
    Deny from all
    Allow from 127.0.0.1
</Proxy>
SSLProxyEngine on
ProxyPass /app1 https://localhost:9090
ProxyPassReverse /app1 https://localhost:9090

พร็อกซีควรทำงานได้ถ้าคุณเยี่ยมชมhttp://localhost/app1หรือhttp://mydomain.com/app1สมมติว่า mydomain.com ชี้ไปที่ localhost


ปัญหาเดียวกับที่ผ่านมาฉันไม่รู้ว่าจะติดตั้ง mod_proxy และ a2enmod mod_proxy ได้อย่างไรบอกว่า mod_proxy ไม่มีอยู่จริง ฉันจะหาวิธีที่จะได้รับ 3 mods เหล่านั้นเพื่อให้ฉันสามารถทำงานได้ ที่กล่าวว่าฉันมี proxy, proxy_http และ ssl ทำงานในขณะนี้ หากสิ่งเหล่านี้เป็นสิ่งที่ฉันต้องการวิธีแก้ปัญหานี้ก็ดูเหมือนจะไม่ทำงาน ฉันได้รับข้อความต้องห้ามซึ่งฉันคิดว่าอาจเกี่ยวข้องกับ "อนุญาตจาก 127.0.0.1" แต่ฉันไม่แน่ใจทั้งหมด
Serneum

ข้อความด้านข้าง mydomain.com ชี้ไปที่ IP ภายนอกของฉันไม่ใช่โลคอลโฮสต์ ฉันได้ลองเปลี่ยน localhost: 9090 เป็น ip ของฉัน: 9090 แต่ไม่ประสบความสำเร็จ เป็น "อนุญาตจาก" และ " localhost " ถัดจาก ProxyPass เทียบกับเซิร์ฟเวอร์หรือเมื่อเทียบกับสิ่งที่กำลังพยายามที่จะเข้าถึงมันได้หรือไม่
Serneum

ทำให้มันใช้งานได้โดยอนุญาตจากทั้งหมดชั่วคราว ข้อเสียคือไม่มี css ฯลฯ ปรากฏบนหน้าเว็บ แต่นั่นเป็นปัญหาที่แยกกันโดยสิ้นเชิงที่ฉันจะมองด้วยตัวเอง ขอบคุณ
Serneum

ซึ่งการตั้งค่าไฟล์ฉันจะต้องเพิ่มProxyRequests Off <Proxy *> Order deny,allow Deny from all Allow from 127.0.0.1 </Proxy> SSLProxyEngine on ProxyPass /app1 https://localhost:9090 ProxyPassReverse /app1 https://localhost:9090?
kiltek

เนื้อหาของหน้าไม่แสดงอาจไม่ใช่ปัญหาแยกต่างหาก คำสั่ง ProxyPass ที่นี่ใช้กับเอกสาร (app1) เท่านั้น ในไดเร็กทอรี Proxy app1 ที่มีเนื้อหาทั้งหมดให้เพิ่มการต่อท้ายสแลช ProxyPass /app1/ https://localhost:9090/และเหมือนกันสำหรับ ProxyPassReverse หากใช้ และประการที่สองเพิ่มการเปลี่ยนเส้นทาง RewriteRule: RewriteRule ^/app1$ /app1/ [R]เนื่องจาก / app1 จะไม่ได้รับพร็อกซี
papo
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.