設置 apache reverse proxy 過程中遇到的一些問題

我很懶 能坐著就不會站著,能躺著就不會坐著

能用 Nginx 就用 Nginx,不過這只是因為我比較常用

很久以前小的時候曾經不知道幹嘛弄過 apache

突然某天心血來潮,想說複習一下 apache 要怎麼架起來

這樣找工作的 resume 又可以多一項可以說嘴的(?

然後我就在 ubuntu 弄了 apache 來部署新專案

通常我在伺服器裡面都用 docker 去跑專案

再用 HTTP 伺服器 proxy docker run 的 port 讓外部可以請求


apache 設定檔如下

簡單說明一下

當請求是 http 時強制導向 443 變成 https

443 那邊也有 SSL 的配置設定

如果需要取用的話,記得請把 your.domain & /your/path 改成自己的 domain 和 SSL 憑證路徑

<VirtualHost *:80>
    ServerName your.domain
    #ReDirect any HTTP request to HTTPS
    RewriteEngine On
    RewriteCond %{HTTPS} off
    RewriteRule (.*) https://%{SERVER_NAME}$1 [R,L]
    RequestHeader set X-Forwarded-Proto "https"
    RequestHeader set X-Forwarded-Port "443"
    RequestHeader set x-Forwarded-Host "your.domain"
</Virtualhost>
<VirtualHost *:443>
    ServerName your.domain

    # SSL Certification
    SSLEngine On
    SSLCertificateFile /your/path
    SSLCertificateKeyFile /your/path
    SSLCertificateChainFile /your/path
    # HSTS
    Header always set Strict-Transport-Security "max-age=63072000;includeSubdomains;"
    # Remove this if site need to use frames or iframes
    Header always set X-Frame-Options DENY
    # Prvent MIME bsed attacks
    Header set X-Content-Type-Options "nosniff"
    RequestHeader set X-Forwarded-Proto "https"
    RequestHeader set X-Forwarded-Port "443"

    <IfModule mod_headers.c>
        Header set X-XSS-Protection "1; mode=block"
    </IfModule>
    ProxyRequests Off
    <Proxy *>
        Order allow,deny
        Allow from all
    </Proxy>
    ProxyPreserveHost On
    ProxyPass / http://localhost:3001/
    ProxyPassReverse / http://localhost:3001/
</VirtualHost>

我的主機用 ubuntu 所以我就塞進 /etc/apache2/sites-enabled 這個 folder 裡面

會塞那邊的原因是因為我看 /etc/apache2/apache2.conf的設定檔有 import IncludeOptional sites-enabled/*.conf

sites-enabled 資料夾裡面所有的 conf 檔,所以就不客氣丟進去了

沒想到一直報錯,都跟 proxy 有關

AH01144: No protocol handler was valid for the URL / (scheme 'http'). If you are using a DSO version of mod_proxy, make sure the proxy submodules are included in the configuration using LoadModule.

看 log 一直出現這個錯誤

查了一下才發現 要啟用 Proxy Modules

sudo a2enmod ssl
sudo a2enmod proxy
sudo a2enmod proxy_balancer
sudo a2enmod proxy_http

浪費了我快20分鐘 嗚嗚

參考