다른 포트로 아파치 리디렉션


151

나는 한동안 이것으로 어려움을 겪었고 분명히 뭔가 잘못하고 있습니다.

같은 컴퓨터에 아파치 서버와 JBoss 서버가 있습니다. mydomain.com의 트래픽을 JBoss localhost : 8080 / example로 리디렉션하고 싶습니다. 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> 

제안 된 업데이트 -여전히 포트 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> 

꽤 좋아 보인다. 증상이 무엇입니까?
Martin Vilcans

Sympotms는 www.mydomain.com을 브라우저에 넣었지만 아파치 루트 디렉토리로 이동한다는 것입니다. 대신 jboss 하위 디렉토리 localhost : 8080 / subdir로 리디렉션하고 싶습니다. 현재 다양한 도메인을 포트 80으로 바로 리디렉션하기 위해 노력하고 있지만 다른 포트로 갈 수는 없습니다.
agentcurry

나는 똑같은 요청을했습니다. 솔루션을 찾았습니까?
Cystack 2018 년

1
@ Cystack-제대로 작동하지 못했습니다. 나는 구성에 많은 변형을 시도하여 나를 미치게했다. 나는 포기했다 = / 해결책을 찾은 경우 여기에 게시하십시오.이 작업을 수행하는 방법을 알고 싶습니다. 행운을 빌어 친구 야!
agentcurry

이것은 나를 위해 일했다 : serverfault.com/a/195831/111707
jjrv

답변:


224

http://example.comProxyPass 및 ProxyPassReverse에서 도메인 을 제외 하고로 남겨 두어야합니다 /. 또한 경로를 리디렉션 할 위치 /의 끝에 두어야합니다 example/. 또한 http://example.comvs.에 문제가있었습니다 http://www.example.com. ServerName www.example.com 및 ServerAlias ​​example.com을 만들 때까지 www 만 작동했습니다. 다음과 같이 가십시오.

<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/…
Pradyut Bhattacharya

1
CentOS 서버에서도 동일합니까? (나는 왜 안되는지 모르겠다.) 그리고 이것은 어떤 구성 파일입니까? (/ etc / httpd / conf 어딘가에 추측하고 있습니다 ...)
Jeremy Jeremy

1
그것은 효과가 있었지만 내 응용 프로그램의 시작 페이지에서 CSS 가로 드되지 않았다는 것을 알았습니다 (이전 example.com:8080/example에서 작동했습니다). 또한 예외가 있습니다. 내가 무엇을 놓치고 있는지 아십니까?
Rajarshee Mitra

1
"서비스를 사용할 수 없음"이 발생하는 오류 내 아파치 내가 그랬어 때까지/usr/sbin/setsebool -P httpd_can_network_connect 1
vladkras

@vladkras 매우 유용한 팁을 주셔서 감사합니다!
음소거

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

루트 도메인에서 Jenkins에 액세스 할 수 있도록이 작업을 정확히 수행하고 싶었습니다.

이것이 작동하도록 기본 사이트를 비활성화해야한다는 것을 알았습니다. 여기 내가 한 일이 있습니다.

$ 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

그것이 누군가를 돕기를 바랍니다.


@Louth에 기여해 주셔서 감사합니다. 나는 오랫동안 이것을 포기했으며 더 이상 서버를 가지고 있지 않습니다. 여전히 작동하지 않는다고 귀찮게하지만 다시 테스트하기 위해 새 서버를 시작할 수 있습니다. 다시 한 번 감사드립니다. 다시 시도하면 업데이트하겠습니다.
agentcurry

Jenkins 위키는 Apache에서 Jenkins를 실행하는 방법을 설명합니다. 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>

이것이 이것이 질문에 정확하게 대답하지는 않는다는 것을 알고 있지만 이것이 Apache 포트 전달의 최고 검색 결과이기 때문에 여기에 넣겠습니다. 그래서 언젠가 누군가를 도울 것이라고 생각합니다.


이것은 나를 위해 일한 유일한 것입니다. *:80대신에 사용 example.com:80하면 포트가 리디렉션되지 않습니다.
Seb123

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 이외의 포트를 사용하면보기에 좋지 않을뿐만 아니라 프록시 서버 나 ISP에 문제가 발생할 수 있습니다. 이 경우 Apache를 제거하고 대신 포트 80에서 JBoss를 실행하십시오!
Martin Vilcans

JBoss에서 모든 것을 실행하는 것은 선택 사항입니다. 아파치 사이트를 JBoss로 옮기는 것을 피하려고 노력했지만 시간이 많이 걸리지 않아야합니다. 피드백 감사드립니다.
agentcurry


1

아파치는 2 개의 다른 포트를 듣고

Listen 8080
Listen 80  

투명한 URL을 원할 때 80을 사용하고 로컬 URL을 허용하지 않는 Google 서비스에 유용한 URL 뒤에 포트를 넣지 않습니까?

그러나 포트를 "dev 환경"에 대한 참조로 사용하는 내부 개발에는 8080을 사용합니다.


0

Apache는 이름 기반 및 IP 기반 가상 호스트를 지원합니다. 둘 다 사용하고있는 것 같습니다. 아마도 필요하지 않습니다.

실제로 이름 기반 가상 호스팅 을 설정하려고 하므로 IP 주소를 지정할 필요가 없습니다.

IP 기반 가상 호스팅을 원하지 않는 경우 <VirtualHost * : 80>을 사용하여 모든 IP 주소에 바인딩하십시오 . 서버에 여러 개의 IP 주소가 있고 다른 주소에서 다른 사이트를 제공하려는 경우가 이에 해당합니다. 가장 일반적인 설정은 이름 기반 가상 호스트입니다.


말이 되겠지만, 이름 기반이면됩니다. 나는 그것을 변경했지만 여전히 다른 포트로 라우팅되지 않았습니다
agentcurry

0

두 가지가 필요합니다.

  1. a를 ServerAlias www.mydomain.com사용자의 설정에
  2. ProxyPassMatch ^(.*)$ http://localhost:8080/example$1mod_dir 및 후행 슬래시가 간섭되지 않도록 프록시 패스를로 변경하십시오 .

ServerAlias를 추가했지만 여전히 운이 없습니다.
agentcurry

0

모두 가상 서버의 도메인 이름을 통해 포트에 액세스하는 데 대한 훌륭한 통찰력입니다. 그러나 가상 서버를 활성화하는 것을 잊지 마십시오. 이것은 주석 처리 될 수 있습니다 :

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

도메인 sxxxx.com의 Apache 서버와 포트 6800에서 실행되는 golang 서버를 사용하여 WSGI를 실행합니다. 일부 방화벽은 포트가있는 도메인 이름을 차단하는 것으로 보입니다. 이것이 우리의 해결책이었습니다.

<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> 
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.