운영체제/Linux

[Linux] Apache https로 redirect 예외처리 (특정 URL만 redirect되지 않도록....)

louky 2020. 10. 26. 18:22
반응형

 

"특정 URL에 대해 Redirect 예외 처리 하기"

http://localhost 로 접근을 하면 https://localhost 로 redirect를 할 수 있다.  

2020/10/12 - [운영체제/Linux] - [Linux] Apache http(80) -> https(433) redirect 설정

 

[Linux] Apache http(80) -> https(433) redirect 설정

Apache에서 http로  들어 올 경우 https로 리다이렉션 해주는 설정이다. 먼저 APACHE_PATH/conf/http.conf에서 module를 활성화 해준다. # vi APACHE_INSTALL_PATH/conf/httpd.conf ~(skip) LoadModule rewrite_m..

louky0714.tistory.com

 

환경 
 - OS :Centos 7.8
 - apache 2.4.46

(아래 설정은 환경에 따라 차이가 있을 수 있습니다.)

 

 

Redirect시 특정 URL에 대해서는 Redirect가 되지 않고 해당 URL로 접근하고자 할 때 아래와 같이 설정하면 된다. 

redirect를 설정해 놓은 config 파일에서 설정한다. (httpd.conf 또는 extra/httpd-vhost.conf)

 

예를 들어 http://localhost/test/index.html 라는 URL에 대해서 test 경로가 포함되면 모두 예외처리 하는 설정이다. 

# vi /usr/local/apache2-ssl/conf/extra/httpd-vhosts.conf
.....

<VirtualHost *:80>
~(생략)

    RewriteEngine On
    RewriteCond %{HTTPS} off
    RewriteCond %{REQUEST_URI} !^/test/.*$      #### Redirect예외 URL
    RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [R,L]

~(생략)

</VirtualHost>

 

RewriteCond %{REQUEST_URI} !^/test/.*$

=> URL주소안에 test 디렉토리가 포함되면 redirect를 하지 않는다 test하위에 있는 어떤 파일을 읽어 드린다고 해도 redirect가 되지 않는다. 

 

상기와 특정 경로가 포함되어 있을 경우에 대한 예외처리이고 "test" 라는 문구 대신 예외처리하고자 하는 경로로 설정하면 된다.

 

만약 경로가 아닌 파일로 한다고 하면 아래와 같이 설정하면 된다. 

 => RewriteCond %{REQUEST_URI} !^/index.html

 

여러 파일일 경우엔 

=> RewriteCond %{REQUEST_URI} !^/(file1|file2|file3|.....)

===>> EX) RewriteCond %{REQUEST_URI} !^/(index.html|index2.html|main_test.html)

버티컬바(?) (|)로 구분지어 OR처럼 여러 파일을 설정할 수 있다. 

 

 

 

 

 


잠깐만요...

단순히 apache로만 되어 있다면 상관이 없겠지만 tomcat이 연동 되어 jkmount가 되어 있는 상황에서 mod_jk(jkmount)를 사용중인 상태에서 단순히 웹서버내 Document 하위 경로에 있거나 특정 경로에 있는 상태에서 mod_jk를 사용하지 않고자 할 경우 아래과 추가로 설정을 해줘야 한다. 

 

  + usage) JkUnmount PATTERN TOMCAT_CONNECT_WORKER_NAME

    JkUnMount : 해당 URL패턴을 톰캣서버에서 호출하지 못하도록 설정

<VirtualHost *:80>
    ServerAdmin admin@localhost
    ServerName localhost
    DocumentRoot "/"
    ErrorLog "|/usr/local/sbin/cronolog /log/%Y/error_log-%Y-%m-%d --symlink=/usr/local/apache2-ssl/logs/error_log"
    CustomLog "|/usr/local/sbin/cronolog /log/%Y/access_log-%Y-%m-%d  --symlink=/usr/local/apache2-ssl/logs/access_log" combined
        CustomLog       "|/bin/logger -p local1.notice -t apache" combined

    RewriteEngine On
    RewriteCond %{HTTPS} off
    RewriteCond %{REQUEST_URI} !^/test/.*$
    RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [R,L]

    #### 예외설정 파일이 하나 또는 많을 경우
    #### 아스테리크(*)를 사용할 수도 있다. 
    JkUnMount /index.html tomcat_connector_worker_name
    JkUnMount /main_test.html tomcat_connector_worker_name
    JkUnMount /index2.html tomcat_connector_worker_name
    
    ### 또는 Directory일 경우 
    JkUnMount /DIR_NAME/* tomcat_connector_worker_name
    
    JkMount /* tomcat_connector_worker_name
    

    #### tomcat_connector_worker_name는 설치한위치에따라 다르겠지만 
    #### APACHE_PATH/conf/httpd.conf에 jk_module에 설정해 놓은 
    #### jkWorkesFile경로의 workers.properties파일내의 worker list를 입력한다. 
    
</VirtualHost>

 

 

 

반응형