अपाचे दूसरे पोर्ट पर रीडायरेक्ट करता है


151

मैंने कुछ समय के लिए इससे संघर्ष किया है और निश्चित रूप से कुछ गलत कर रहा हूं।

मेरे पास एक ही मशीन पर अपाचे सर्वर और एक JBoss सर्वर है। मैं mydomain.com के लिए ट्रैफ़िक को पुनर्निर्देशित करना चाहूंगा JBoss लोकलहोस्ट को: 8080 / उदाहरण। DNS वर्तमान में mydomain.com के लिए सेटअप है और यह ब्राउज़र में प्रवेश करने पर सीधे पोर्ट 80 पर जाएगा।

मेरा सवाल यह है कि जब एक निश्चित डोमेन नाम अपाचे (इस मामले में, "mydomain.com) पर आता है, तो मैं एक अलग पोर्ट पर कैसे पुनर्निर्देशित करूं?

<VirtualHost ip.addr.is.here> 
  ProxyPreserveHost On
  ProxyRequests Off
  ServerName mydomain.com
  ProxyPass http://mydomain.com http://localhost:8080/example
  ProxyPassReverse http://mydomain.com http://localhost:8080/example
</VirtualHost> 

अद्यतन w / सुझाव - अभी भी 8080 पोर्ट करने के लिए अग्रेषित नहीं कर रहा है

<VirtualHost *:80> 
  ProxyPreserveHost On
  ProxyRequests Off
  ServerName mydomain.com
  ServerAlias www.mydomain.com
  ProxyPass http://mydomain.com http://localhost:8080/example
  ProxyPassReverse http://mydomain.com http://localhost:8080/example
</VirtualHost> 

यह बहुत अच्छा लग रहा है। इसके लक्षण क्या है?
मार्टिन विलकंस

सिम्पटम्स यह है कि मैंने www.mydomain.com को ब्राउज़र में डाला है लेकिन यह अपाचे रूट डायर को जाता है। इसके बजाय, मैं इसके लिए एक jboss उपनिर्देशिका लोकलहोस्ट पर पुनर्निर्देशित करना चाहूंगा: 8080 / उपडिर। वर्तमान में मेरे पास विभिन्न डोमेन को पुनः पोर्ट 80 पर पुनर्निर्देशित करने के लिए काम कर रहा है, लेकिन दूसरे पोर्ट पर जाने के लिए यह पर्याप्त नहीं है।
एजेंटक्रुरी

मेरा एक ही अनुरोध है: क्या आपको कोई समाधान मिला?
सिस्टैक

1
@ सिस्टैक - मैं इसे काम करने के लिए काफी नहीं पा सका। मैंने विन्यास के इतने सारे रूपों की कोशिश की, यह मुझे पागल कर गया। मैंने इसे छोड़ दिया = / यदि आप एक समाधान खोजने के लिए ऐसा करते हैं तो कृपया इसे यहां पोस्ट करें, मैं यह जानना चाहूंगा कि इसे कैसे प्राप्त किया जाए। गुड लक मेरे दोस्त!
एजेंटक्रीड़ी

इसने मेरे लिए काम किया: serverfault.com/a/195831/111707
jjrv

जवाबों:


224

आपको http://example.comProxyPass और ProxyPassReverse में डोमेन को छोड़ देना चाहिए और इसे छोड़ देना चाहिए /। इसके अतिरिक्त, आपको जहां इसे पुनर्निर्देशित किया जा रहा है /, उसके अंत में छोड़ने की आवश्यकता example/है। इसके अलावा, मैं के साथ कुछ परेशानी थी http://example.comबनाम http://www.example.com- केवल www काम किया जब तक मैं सर्वर नाम www.example.com, और सर्वर का example.com बनाया है। निम्नलिखित को एक बार दें।

<VirtualHost *:80> 
  ProxyPreserveHost On
  ProxyRequests Off
  ServerName www.example.com
  ServerAlias example.com
  ProxyPass / http://localhost:8080/example/
  ProxyPassReverse / http://localhost:8080/example/
</VirtualHost> 

इन परिवर्तनों को करने के बाद, आवश्यक मॉड्यूल जोड़ें और अपाचे को पुनरारंभ करें

sudo a2enmod proxy && sudo a2enmod proxy_http && sudo service apache2 restart

9
अपाचे को फिर से शुरू करने से पहले अपाचे मॉड्यूल को सक्षम करें - digitalocean.com/community/tutorials/…
भट्टाचार्य

1
क्या यह एक CentOS सर्वर के लिए समान होगा? (मैं नहीं देख क्यों नहीं, सिर्फ यकीन कर रहा हूँ)। और, यह कौन सी config फाइल होगी? (कहीं / / आदि / httpd / conf मैं अनुमान लगा रहा हूं ...)
जेरेमी

1
यह काम किया, लेकिन मैंने देखा कि मेरे आवेदन के स्वागत पृष्ठ में, सीएसएस लोड नहीं किया गया था (जो पहले example.com:8080/example पर काम करता था)। और कुछ अपवाद भी मिले। किसी भी विचार मैं क्या याद कर रहा हूँ?
राजर्षि मित्र

1
इससे मेरे /usr/sbin/setsebool -P httpd_can_network_connect 1
http

@vladkras उस टिप के लिए बहुत बहुत धन्यवाद, बहुत मददगार!
mneute 14

28

मैंने निम्नलिखित कोड के साथ इस समस्या को हल किया:

LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_http_module modules/mod_proxy_http.so
<VirtualHost *:80>
ProxyPreserveHost On
ProxyRequests Off
ServerName myhost.com
ServerAlias ww.myhost.com
ProxyPass / http://localhost:8080/
ProxyPassReverse / http://localhost:8080/
</VirtualHost>

मैंने भी इस्तेमाल किया:

a2enmod proxy_http

10

मैं ठीक यही करना चाहता था ताकि मैं जेनकींस को रूट डोमेन से एक्सेस कर सकूं।

मैंने पाया कि मुझे इसे काम करने के लिए डिफ़ॉल्ट साइट को अक्षम करना पड़ा। यहाँ ठीक वही है जो मैंने किया था।

$ sudo vi /etc/apache2/sites-available/jenkins

और इसे फाइल में डालें:

<VirtualHost *:80>
  ProxyPreserveHost On
  ProxyRequests Off
  ServerName mydomain.com
  ServerAlias mydomain
  ProxyPass / http://localhost:8080/
  ProxyPassReverse / http://localhost:8080/
  <Proxy *>
        Order deny,allow
        Allow from all
  </Proxy>
</VirtualHost>

आगे आपको उपयुक्त साइटों को सक्षम / अक्षम करना होगा:

$ sudo a2ensite jenkins
$ sudo a2dissite default
$ sudo service apache2 reload

आशा है कि यह किसी की मदद करता है।


योगदान के लिए धन्यवाद @ मुँह। मेरे पास लंबे समय से यह दिया गया है और अब सर्वर नहीं है। फिर भी मुझे परेशान करता है कि मुझे कभी भी यह काम नहीं मिला, मैं फिर से परीक्षण करने के लिए एक नया सर्वर शुरू कर सकता हूं। फिर से धन्यवाद, मुझे यह सुनिश्चित करने के लिए अद्यतन किया जाएगा कि क्या / जब मैं इसे फिर से आज़माऊँ।
18 अक्टूबर को

जेनकिंस विकी बताते हैं कि अपाचे के पीछे जेनकिंस कैसे चलाया जाए: wiki.jenkins-ci.org/display/JENKINS/…
mneute

6

परीक्षण और त्रुटि से यह पता चला। यदि आपका कॉन्फ़िगरेशन एक ServerName निर्दिष्ट करता है, तो आपके VirtualHost निर्देश को वही करने की आवश्यकता होगी। निम्नलिखित उदाहरण में, awesome.example.com और amazing.example.com दोनों को पोर्ट 4567 पर चलने वाली कुछ स्थानीय सेवा के लिए भेजा जाएगा।

ServerName example.com:80

<VirtualHost example.com:80>
  ProxyPreserveHost On
  ProxyRequests Off
  ServerName awesome.example.com
  ServerAlias amazing.example.com
  ProxyPass / http://localhost:4567/
  ProxyPassReverse / http://localhost:4567/
</VirtualHost>

मुझे पता है कि यह वास्तव में इस सवाल का जवाब नहीं देता है, लेकिन मैं इसे यहां रख रहा हूं क्योंकि यह अपाचे बंदरगाह अग्रेषण के लिए शीर्ष खोज परिणाम है। इसलिए मुझे लगता है कि यह किसी दिन किसी की मदद करेगा।


यह एकमात्र ऐसा है जिसने मेरे लिए काम किया। *:80इसके बजाय उपयोग करने का example.com:80मतलब है कि बंदरगाह को पुनर्निर्देशित नहीं किया जाएगा।
सेबीज

4

आपको यह सुनिश्चित करना होगा कि सर्वर पर प्रॉक्सी सक्षम है। आप निम्न आदेशों का उपयोग करके ऐसा कर सकते हैं:

  a2enmod proxy
  a2enmod proxy_http

  service apache2 restart

3

यह एक पुराना प्रश्न हो सकता है, लेकिन यहाँ मैंने क्या किया है:

अपाचे द्वारा भरी हुई एक .conf फ़ाइल में:

<VirtualHost *:80>
  ServerName something.com
  ProxyPass / http://localhost:8080/
</VirtualHost>

स्पष्टीकरण: स्थानीय मशीन के पोर्ट 80 पर सभी अनुरोधों पर सुनें। अगर मैंने " http://something.com/somethingorother" अनुरोध किया है , तो उस अनुरोध को " http://localhost:8080/somethingorother" आगे भेजें । यह बाहरी आगंतुक के लिए काम करना चाहिए क्योंकि डॉक्स के अनुसार, यह स्थानीय सर्वर के स्थान के लिए दूरस्थ अनुरोध को मैप करता है।

मैं Apache 2.4.6-2ubuntu2.2 चला रहा हूं, इसलिए मुझे यकीन नहीं है कि "-2ubuntu2.2" इस उत्तर की व्यापक प्रयोज्यता को कैसे प्रभावित करता है।

इन परिवर्तनों को करने के बाद, आवश्यक मॉड्यूल जोड़ें और अपाचे को पुनरारंभ करें

sudo a2enmod proxy && sudo a2enmod proxy_http && sudo service apache2 restart

2

यदि आपको JBoss और mydomain.com:8080 के लिए एक प्रॉक्सी का उपयोग करने की आवश्यकता नहीं है, तो दुनिया के लिए "उजागर" किया जा सकता है, फिर मैं यह करूंगा।

<VirtualHost *:80>
  ServerName mydomain.com
  Redirect 301 / http://mydomain.com:8080/
</VirtualHost>

80 के अलावा किसी अन्य पोर्ट का उपयोग न केवल बदसूरत दिखता है, बल्कि प्रॉक्सी सर्वर या आईएसपी के साथ भी समस्या पैदा कर सकता है। उस स्थिति में, बस अपाचे को हटा दें और इसके बजाय पोर्ट 80 पर जेबॉस चलाएं!
मार्टिन विलकंस

JBoss के तहत सबकुछ चलाना एक विकल्प है, मैं बस ApB साइटों को JBoss पर ले जाने से बचने की कोशिश कर रहा था, लेकिन यह अधिक समय लेने वाला नहीं होना चाहिए। प्रतिक्रिया के लिए धन्यवाद।
एजेंटक्रुरी


1

मेरी अपाचे 2 अलग-अलग बंदरगाहों से सुनता है,

Listen 8080
Listen 80  

मैं and० का उपयोग करता हूं जब मैं एक पारदर्शी URL चाहता हूं और URL के बाद पोर्ट को Google सेवाओं के लिए उपयोगी नहीं रखता हूं जो स्थानीय यूआरएल की अनुमति नहीं देते हैं?

लेकिन मैं आंतरिक विकास के लिए 8080 का उपयोग करता हूं जहां मैं "देव पर्यावरण" के संदर्भ के रूप में बंदरगाह का उपयोग करता हूं


0

Apache नाम आधारित और IP आधारित वर्चुअल होस्ट का समर्थन करता है। ऐसा लगता है कि आप दोनों का उपयोग कर रहे हैं, जो कि शायद आपकी जरूरत नहीं है।

मुझे लगता है कि आप वास्तव में नाम-आधारित वर्चुअल होस्टिंग स्थापित करने की कोशिश कर रहे हैं , और इसके लिए आपको आईपी पते को निर्दिष्ट करने की आवश्यकता नहीं है।

सभी आईपी पते को बाँधने के लिए <VirtualHost *: 80> आज़माएँ, जब तक कि आप वास्तव में आईपी ​​आधारित वर्चुअल होस्टिंग नहीं चाहते । यह मामला हो सकता है यदि सर्वर में कई आईपी पते हैं, और आप अलग-अलग पते पर विभिन्न साइटों की सेवा करना चाहते हैं। सबसे सामान्य सेटअप है (मुझे लगता है) नाम आधारित वर्चुअल होस्ट होगा।


यह समझ में आता है, नाम आधारित है जो मुझे चाहिए। मैंने इसे बदल दिया, लेकिन यह अभी भी दूसरे बंदरगाह पर नहीं जा रहा है
Agentcurry

0

आपको 2 चीजें चाहिए:

  1. ServerAlias www.mydomain.comअपने विन्यास में एक जोड़ें
  2. ProxyPassMatch ^(.*)$ http://localhost:8080/example$1संभवतः समीपस्थ से mod_dir और अनुगामी स्लैश रखने के लिए , अपने समीपता को बदलें ।

मैंने ServerAlias ​​को जोड़ा लेकिन फिर भी कोई किस्मत नहीं।
Agentcurry

0

सभी वर्चुअल सर्वर पर डोमेन नाम के माध्यम से बंदरगाहों तक पहुंचने के लिए उत्कृष्ट अंतर्दृष्टि हैं। हालांकि, वर्चुअल सर्वर को सक्षम करने के लिए मत भूलना; इस पर टिप्पणी की जा सकती है:

NameVirtualHost *:80
<Directory "/home/dawba/www/">
 allow from all
</Directory>

हम WSGI को डोमेन sxxxx.com पर अपाचे सर्वर के साथ चलाते हैं और पोर्ट 6800 पर चल रहे एक गोलंग सर्वर के साथ। कुछ फायरवॉल बंदरगाहों के साथ डोमेन नामों को ब्लॉक करने लगते हैं। यह हमारा समाधान था:

<VirtualHost *:80>
 ProxyPreserveHost On
 ProxyRequests Off
 ServerName wsgi.sxxxx.com
 DocumentRoot "/home/dxxxx/www"
  <Directory "/home/dxxx/www">
    Options Indexes FollowSymLinks
    AllowOverride None
    Order allow,deny
    Allow from all
  </Directory>
 ScriptAlias /py/ "/home/dxxxx/www/py/"
 WSGIScriptAlias /wsgiprog /home/dxxxx/www/wsgiprog/Form/Start.wsgi
</VirtualHost>

<VirtualHost *:80>
 ProxyPreserveHost On
 ProxyRequests Off
 ServerName sxxxx.com 
 ServerAlias www.sxxxx.com
 ProxyPass / http://localhost:6800/
 ProxyPassReverse / http://localhost:6800/
</VirtualHost>

0

यह ISPConfig में भी काम कर रहा है। वेबसाइट सूची में एक डोमेन के अंदर मिलता है, विकल्प टैब पर क्लिक करें, इन पंक्तियों को जोड़ें:;

ProxyPass / http://localhost:8181/
ProxyPassReverse / http://localhost:8181/

फिर वेबसाइट पर जाएं और wolaa :) यह HTTPS प्रोटोकॉल पर भी काम कर रहा है।


0

इसको आजमाओ-

<VirtualHost *:80> 
  ProxyPreserveHost On
  ProxyRequests Off
  ServerName www.adminbackend.example.com
  ServerAlias adminbackend.example.com
  ProxyPass / http://localhost:6000/
  ProxyPassReverse / http://localhost:6000/
  ErrorLog ${APACHE_LOG_DIR}/error.log
  CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost> 
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.