이 도메인을 이 포트에 매핑하고 싶습니다. 어떻게 해야 합니까?
http://test1.example.com/phpmyadmin/ example.com:80/phpmyadmin/
http://test1.example.com/app1/ example.com:8080/app1/
http://test1.example.com/app2/ example.com:8090/app2/
http://webmin.example.com/ example.com:10000/
이것이 제가하는 것입니다. 문제는 phpmyadmin
작동하지 않는다는 것입니다. 으로 전달됩니다 glassfish
.
webmin
별도의 도메인이기 때문에 작동합니다.
phpmyadmin
동일한 도메인에 어떻게 매핑하나요 ?http://test1.example.com/phpmyadmin/
<VirtualHost *:80>
ServerName test1.example.com
ProxyRequests Off
ProxyPreserveHost On
<Proxy *>
Order deny,allow
Allow from all
</Proxy>
ProxyPass / http://localhost:8080/
ProxyPassReverse / http://localhost:8080/
ProxyPass /admin/ https://localhost:4848/
ProxyPassReverse /admin/ https://localhost:4848/
</VirtualHost>
<VirtualHost *:80>
ServerName test1.example.com/phpmyadmin/
DocumentRoot /usr/share/phpmyadmin
Alias /phpmyadmin /usr/share/phpmyadmin
Alias /mysql /usr/share/phpmyadmin
</VirtualHost>
<VirtualHost *:80>
ServerName webmin.example.com
ProxyRequests Off
ProxyPreserveHost On
<Proxy *>
Order deny,allow
Allow from all
</Proxy>
ProxyPass / http://localhost:10000/
ProxyPassReverse / http://localhost:10000/
</VirtualHost>
답변1
상단 VirtualHost 블록 내부에 새 위치를 배치합니다.
<VirtualHost *:80>
ServerName test1.example.com
ProxyRequests Off
ProxyPreserveHost On
<Proxy *>
Order deny,allow
Allow from all
</Proxy>
ProxyPass / http://localhost:8080/
ProxyPassReverse / http://localhost:8080/
ProxyPass /admin/ https://localhost:4848/
ProxyPassReverse /admin/ https://localhost:4848/
ProxyPass /phpmyadmin/ https://localhost:80/phpmyadmin/
ProxyPassReverse /phpmyadmin/ https://localhost:80/phpmyadmin/
ProxyPass /app1/ https://localhost:8080/app1/
ProxyPassReverse /app1/ https://localhost:8080/app1/
ProxyPass /app2/ https://localhost:8090/app2/
ProxyPassReverse /app2/ https://localhost:8090/app2/
</VirtualHost>
답변2
@josh-jolly가 제안한 것처럼... 구성에 포트 80에서 무엇이든 수신하는 여러 VHost가 있으므로 다양한 프록시 문을 단일 VHost에 넣는 것이 도움이 됩니다.
복잡성의 기본 순서
그러나 Josh의 제안이 전달하지 못한 것(그리고 그의 예에서 잘못 언급된 것)은 mod_rewrite와 마찬가지로 mod_proxy가 제공된 패턴을 수신된 순서대로 처리한다는 것입니다.
즉, 다른 ProxyPass/ProxyPassReverse 블록 앞에 다음 줄을 넣으면 모든 트래픽이 이 패턴으로 캡처됩니다.
ProxyPass / http://localhost:8080/
ProxyPassReverse / http://localhost:8080/
이것이 아마도 PHPMyAdmin으로 전송하려는 트래픽 대신 모든 트래픽이 Glassfish로 전송되는 이유일 것입니다.
복잡성의 중첩 순서
마찬가지로, 다르게 라우팅하려는 중첩된 URL 패턴에 대한 복잡성 규칙의 순서에 주의해야 합니다.
다음 예에서는 세심하게 제작된 복잡한 순차 규칙 세트를 보여줍니다.
ProxyPass /myapp http://localhost:9090/
ProxyPassReverse /myapp http://localhost:9090/
ProxyPass /myapp/images http://localhost:8080/
ProxyPassReverse /myapp/images http://localhost:8080/
이 예에서는 두 URL이 모두 연결되므로 모든 트래픽은 포트 9090으로 이동 /myapp
하지만 mod_proxy는 /myapp/images
해당 패턴에 도달하기 전에 더 기본적인 패턴과 일치합니다.
URL 패턴의 복잡성이 줄어들기 때문에 다음과 같이 블록 순서를 지정하면 두 패턴이 적절하게 일치할 수 있습니다.
ProxyPass /myapp/images http://localhost:8080/
ProxyPassReverse /myapp/images http://localhost:8080/
ProxyPass /myapp http://localhost:9090/
ProxyPassReverse /myapp http://localhost:9090/
좋은 습관
- VHost 구성에 주석을 포함합니다. 항상 업데이트하거나 관리하는 사람은 아닙니다.
- ProxyPass와 ProxyPassReverse는 항상 일치해야 합니다. 두 지시어가 달라야 하는 유효한 사용법을 찾지 못했습니다. URL 패턴에 후행 슬래시가 포함되거나 포함되지 않은 경우 특히 그렇습니다.
- 관련 지침을 그룹화하고 일종의 주석 블록을 사용하여 시각적으로 구분합니다. 이는 규모가 크거나 복잡한 VHost 구성에 특히 유용합니다. 그러나 연습이 습관이 되면 인생이 더 쉬워질 것입니다.