WAS/Apache

기본 httpd reverse proxy 설정 (http, https)

Lawmin 2025. 4. 8. 13:42

Rocky Linux 9 에는 기본 openssl 3 이상이 설치되어 있음

openssl 3이상으로 컴파일하면, TLS1.2~ 만 지원하므로,

(필요 시)TLS1.0~1.3까지 지원하려면 openssl 1.1.1w 설치 후 이를 이용하도록 httpd (2.4.63등) 컴파일 필요

※ /app/httpd 에 설치하는 것으로 가정

 

1) TLS1.0~1.3 (호환성) 을 위해 openssl 1.1.1w 이용 시

wget https://www.openssl.org/source/openssl-1.1.1w.tar.gz
tar xvfz openssl-1.1.1w.tar.gz
cd openssl-1.1.1w
dnf install -y perl perl-core perl-FindBin
./config --prefix=/usr/local/openssl-1.1.1w
make -j4
make install
./configure --prefix=/app/httpd --enable-mods-shared=all --enable-so --with-mpm=event --enable-ssl --with-ssl=/usr/local/openssl-1.1.1w
make -j4
make install

 

2) TLS1.2 이상 적용 시 (보안 개선)

./configure --prefix=/app/httpd --enable-mods-shared=all --enable-so --with-mpm=event --enable-ssl
make -j4
make install

 

1. conf/httpd.conf

Listen 80
ServerName "서버IP:80"
ServerRoot "/app/httpd"
DocumentRoot "/app/httpd/htdocs"

LoadModule unixd_module modules/mod_unixd.so
LoadModule log_config_module modules/mod_log_config.so
LoadModule setenvif_module modules/mod_setenvif.so
LoadModule authz_core_module modules/mod_authz_core.so
LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_http_module modules/mod_proxy_http.so

ServerTokens Prod
ServerSignature Off
TraceEnable Off

LogFormat "%a %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
LogFormat "%a %l %u %t \"%r\" %>s %b" common
CustomLog "logs/access_log" common
ErrorLog "logs/error_log"
LogLevel warn

<Directory />
    Options None
    AllowOverride None
    Require all denied
</Directory>

<Directory "/app/httpd/htdocs">
    Options -Indexes +FollowSymLinks
    AllowOverride None
    Require all granted
</Directory>

Include conf/extra/httpd-mpm.conf

LoadModule headers_module modules/mod_headers.so
<IfModule headers_module>
  Header always unset X-Powered-By
  Header always unset X-CF-Powered-By
</IfModule>

LoadModule ssl_module modules/mod_ssl.so
LoadModule socache_shmcb_module modules/mod_socache_shmcb.so
Include conf/extra/httpd-ssl.conf
<IfModule ssl_module>
SSLRandomSeed startup builtin
SSLRandomSeed connect builtin
</IfModule>

ProxyPass "/api1" "http://API서버/api1"
ProxyPassReverse "/api1" "http://api서버/api1"
Header always set Access-Control-Allow-Origin "*"

 

2. conf/extra/httpd-ssl.conf

Listen 443

<!--S TLS 1.0 필요 시 (JDK 6 연동 등) -->
<!-- 주석 해제
SSLCipherSuite HIGH:MEDIUM:+TLSv1:!MD5:!RC4:!3DES
SSLProxyCipherSuite HIGH:MEDIUM:+TLSv1:!MD5:!RC4:!3DES
SSLHonorCipherOrder on
SSLProtocol -all +TLSv1 +TLSv1.1 +TLSv1.2 +TLSv1.3
SSLProxyProtocol -all +TLSv1 +TLSv1.1 +TLSv1.2 +TLSv1.3
-->
<!--E TLS 1.0 필요시 (JDK 6 연동 등) -->

<!--S TLS 1.2 이상 -->
<!-- TLS 1.0 필요시 주석 설정 -->
SSLProtocol             -all +TLSv1.2 +TLSv1.3
SSLOpenSSLConfCmd       Curves X25519:prime256v1:secp384r1
SSLCipherSuite          ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:DHE-RSA-CHACHA20-POLY1305
SSLHonorCipherOrder     off
SSLSessionTickets       off
SSLUseStapling On
SSLStaplingCache "shmcb:logs/ssl_stapling(32768)"
<!--E TLS 1.2 이상 -->

SSLPassPhraseDialog  builtin
SSLSessionCache        "shmcb:logs/ssl_scache(512000)"
SSLSessionCacheTimeout  300

<VirtualHost _default_:443>
  ServerName "서버IP:443"
  DocumentRoot "/app/httpd/htdocs"
  ErrorLog "logs/error_log"
  CustomLog logs/access_log common

  SSLEngine on
  SSLCertificateFile "conf/ssl/도메인.crt"
  SSLCertificateKeyFile "conf/ssl/도메인.key"
  SSLCertificateChainFile "conf/ssl/도메인.crt"

  ProxyPass "/api1" "http://API서버/api1"
  ProxyPassReverse "/api1" "http://api서버/api1"
  Header always set Access-Control-Allow-Origin "*"

  BrowserMatch "MSIE [2-5]" \
    nokeepalive ssl-unclean-shutdown \
    downgrade-1.0 force-response-1.0
    CustomLog "/app/httpd/logs/ssl_request_log" \
      "%t %h %{SSL_PROTOCOL}x %{SSL_CIPHER}x \"%r\" %b"
</VirtualHost>