2012-04-26 25 views
9

Tôi đã có một vài webapps chạy trên máy chủ web của tôi:Cách thiết lập vị trí proxy cho tất cả đường dẫn ngoại trừ một số với apache2?

  • SVN Repository Browser, truy cập qua https://beta.mydomain.tld/svn/repos
  • Trác dụ, accesible qua https://beta.mydomain.tld/trac
  • ứng dụng java web riêng của tôi, truy cập qua http://beta.mydomain.tld/, sử dụng một Proxy cho Apache Tomcat địa phương trên cổng 8080

Xin lưu ý rằng hai cái đầu tiên có sẵn qua SSL, thứ ba không có (chưa). Bây giờ tôi cần phải làm cho ứng dụng web của tôi có sẵn qua https, nhưng tôi muốn Trac và SVN Browser vẫn có thể truy cập được ở vị trí hiện tại của họ.

I.e. Tôi đang cố định cấu hình apache2 để ủy quyền tất cả các yêu cầu không bắt đầu bằng svn hoặc trac đối với Tomcat.

Đối với các ứng dụng web SSL hiện có, có cấu hình sau

<Location /svn/repos> 
     DAV svn 
     SVNParentPath /home/myuser/svn 
     SVNListParentPath on 
     AuthType Basic 
     AuthName "Subversion repository" 
     AuthUserFile /home/myuser/.htpasswd 
     Require valid-user 
    </Location> 

    <Location /trac> 
     SetHandler mod_python 
     PythonHandler trac.web.modpython_frontend 
     PythonOption TracEnvParentDir /home/myuser/trac 
     PythonOption TracUriRoot /trac 
     AuthType Basic 
     AuthName "Trac" 
     AuthUserFile /home/myuser/.htpasswd 
     Require valid-user 
    </Location> 

Tôi cố gắng để thêm vị trí sau, nhưng nó đã không giúp đỡ bất cứ điều gì ...

<Location /> 
     ProxyPass   http://localhost:8080 
     ProxyPassReverse http://localhost:8080/ 
    </Location> 

Để biết thêm thông tin, đây là cấu hình apache2 hoàn chỉnh liên quan đến phần SSL (không có bất kỳ thử nghiệm không thành công nào của tôi trong đó - tôi nghĩ đó là cấu hình trac mặc định):

<VirtualHost *:443> 
    ServerAdmin [email protected] 
    ServerName beta.mydomain.tld:443 

    DocumentRoot /var/www/ 
    <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 /var/log/apache2/error.log 

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

    CustomLog /var/log/apache2/ssl_access.log combined 

    Alias /doc/ "/usr/share/doc/" 
    <Directory "/usr/share/doc/"> 
      Options Indexes MultiViews FollowSymLinks 
      AllowOverride None 
      Order deny,allow 
      Deny from all 
      Allow from 127.0.0.0/255.0.0.0 ::1/128 
    </Directory> 

    SSLEngine on 

    SSLCertificateFile /etc/ssl/certs/ssl.crt 
    SSLCertificateKeyFile /etc/ssl/private/ssl.key 

    BrowserMatch ".*MSIE.*" \ 
      nokeepalive ssl-unclean-shutdown \ 
      downgrade-1.0 force-response-1.0 

    <Location /svn/repos> 
     DAV svn 
     SVNParentPath /home/myuser/svn 
     SVNListParentPath on 
     AuthType Basic 
     AuthName "Subversion repository" 
     AuthUserFile /home/myuser/.htpasswd 
     Require valid-user 
    </Location> 

    <Location /trac> 
     SetHandler mod_python 
     PythonHandler trac.web.modpython_frontend 
     PythonOption TracEnvParentDir /home/myuser/trac 
     PythonOption TracUriRoot /trac 
     AuthType Basic 
     AuthName "Trac" 
     AuthUserFile /home/myuser/.htpasswd 
     Require valid-user 
    </Location> 

+0

Xin lỗi, bây giờ tôi đã viết điều này, tôi nhận ra rằng nó sẽ có vị trí tốt hơn tại serverfault. Sẽ rất tuyệt nếu ai đó có thể di chuyển nó ở đó ... Cảm ơn. – peterp

Trả lời

13

Chỉ cần đặt ProxyPass! vào hai khối Vị trí đó. Điều đó dừng proxy cho các vị trí có liên quan.

+0

cảm ơn bạn rất nhiều, tôi sẽ không bao giờ tìm ra điều này từ các tài liệu. – Zalumon

+0

Lạ thật, tôi đã làm. – EJP

+1

tốt cho bạn ;-) – Zalumon

2

Tôi có cùng một trường hợp (trên cửa sổ). Đối với bất kỳ ai đấu tranh với điều này:

Nó chỉ bắt đầu hoạt động cho tôi khi tôi chuyển phần "vị trí svn" trước chỉ thị Proxy *.

<VirtualHost *:443> 
    ServerName www.domain.com 
    DocumentRoot "C:/Apache/domain" 
    ServerAdmin [email protected] 

    SSLEngine On 
    SSLCertificateFile "conf/ssl/domain.crt" 
    SSLCertificateKeyFile "conf/ssl/domain.key" 
    SSLCertificateChainFile "conf/ssl/domain.ca-bundle.crt" 

    <Location /svn> 
    DAV svn 
    SVNPath "C:/svnrepo" 
    SSLRequireSSL 
    AuthName "www.domain.com" 
    AuthType Basic 
    AuthUserFile "conf/svn/users" 
    AuthGroupFile "conf/svn/groups" 
    Require valid-user 

    # needs to come before the ProxyPass directives 
    ProxyPass ! 
    </Location> 

    ProxyRequests off 
    ProxyPreserveHost on 

    ProxyPass/ajp://127.0.0.1:8080/ 
    ProxyPassReverse/ajp://127.0.0.1:8080/  
</VirtualHost> 
Các vấn đề liên quan