質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

88.77%

Apacheの複数サイトへのリバースプロキシについて

受付中

回答 1

投稿

  • 評価
  • クリップ 0
  • VIEW 1,974

mercurius51

score 12

現在、Apacheのリバースプロキシ機能を使用して以下のような構成の環境を構築したいと考えています。
![イメージ説明説明]
(419e985e9606df496f6bdd4b34004835.jpeg)](1eca775e812b51a228c84e0a2e5ad2bc.jpeg)

※Mattermost部分はまだ構築できていません
この構成の中で、設定を一つずつ適用させた場合にはそれぞれのサービスに問題なくアクセスできることは確認できました。
しかし、同時にこれらを行うことが難しい状態です。
具体的いま分かっていることとしては
(1)KibanaとWordPressの定義は共存できる
(2)GitLabの定義とその他の定義が共存できない

事象としては、GitLabの定義を有効にしてhttps://mydomain.com/kibana/https:/mydomain.com/blog/にブラウザでアクセスすると、

Not found "/kibana/"

このような画面が表示され、思ったように動きません
この状態のときはGitLabにはアクセスが可能です

Apacheのログを見ましたが、上記ページを返しているメッセージが出ているのみであまり役に立ちませんでした。
なお、このログはプロキシによって出力されています。
そのため、/blogあてのリクエストもプロキシを通っていることになります。
末尾にコンフィグを掲出しますが、プロキシを通らないように設定はしてあります。

xx.xx.xx.xx - - [25/May/2019:01:34:38 +0900] "GET /blog/ HTTP/1.1" 404 19 "-" "Mozilla/5.0 (Android 9; Mobile; rv:67.0) Gecko/67.0 Firefox/67.0"


どうにかして上記環境を構築したいと思っております、ご助言いただけますと幸いです。
よろしくお願いいたします。

/etc/httpd/conf/httpd.conf(コメント行除外)

ServerRoot "/etc/httpd"
Listen 80
Include conf.modules.d/*.conf
User apache
Group apache
ServerName mydomain.com:80

<Directory />
    AllowOverride none
    Require all denied
</Directory>

DocumentRoot "/var/www/html"

<Directory "/var/www">
    AllowOverride None
    # Allow open access:
    Require all granted
</Directory>

<Directory "/var/www/html">
    Options Indexes FollowSymLinks
    AllowOverride None
    Require all granted
</Directory>

<IfModule dir_module>
    DirectoryIndex index.html
</IfModule>

<Files ".ht*">
    Require all denied
</Files>

ErrorLog "logs/error_log"
LogLevel warn

<IfModule log_config_module>
    LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
    LogFormat "%h %l %u %t \"%r\" %>s %b" common

    <IfModule logio_module>
      LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\" %I %O" combinedio
    </IfModule>

    CustomLog "logs/access_log" combined
</IfModule>

<IfModule alias_module>
    ScriptAlias /cgi-bin/ "/var/www/cgi-bin/"
</IfModule>

<Directory "/var/www/cgi-bin">
    AllowOverride None
    Options None
    Require all granted
</Directory>

<IfModule mime_module>
    TypesConfig /etc/mime.types
    AddType application/x-compress .Z
    AddType application/x-gzip .gz .tgz

    AddType text/html .shtml
    AddOutputFilter INCLUDES .shtml
</IfModule>

AddDefaultCharset UTF-8

<IfModule mime_magic_module>
    MIMEMagicFile conf/magic
</IfModule>

EnableSendfile on

IncludeOptional conf.d/*.conf

/etc/httpd/conf.d/gitlab_proxy.conf

Alias /blog /usr/share/blog

<Directory "/usr/share/blog">
    Options FollowSymLinks
    AllowOverride All
    Require all granted
</Directory>

ProxyPass /blog !

<VirtualHost *:80>
  ServerName mydomain.com
  ServerSignature Off

  RewriteEngine on
  RewriteCond %{HTTPS} !=on
  RewriteRule .* https://%{SERVER_NAME}%{REQUEST_URI} [NE,R,L]
  ProxyPass /blog !
  ProxyPass /kibana !

</VirtualHost>

<VirtualHost *:443>
  SSLEngine on
  SSLProtocol all -SSLv2
  SSLHonorCipherOrder on
  SSLCipherSuite "ECDH+AESGCM:DH+AESGCM:ECDH+AES256:DH+AES256:ECDH+AES128:DH+AES:ECDH+3DES:DH+3DES:RSA+AESGCM:RSA+AES:RSA+3DES:!aNULL:!MD5:!DSS"
  Header add Strict-Transport-Security: "max-age=15768000;includeSubdomains"
  SSLCompression Off
  SSLCertificateFile /etc/letsencrypt/live/mydomain.com/cert.pem
  SSLCertificateKeyFile /etc/letsencrypt/live/mydomain.com/privkey.pem
  SSLCACertificateFile /etc/letsencrypt/live/mydomain.com/chain.pem

  ServerName mydomain.com
  ServerSignature Off

  ProxyPreserveHost On

  AllowEncodedSlashes NoDecode

  <Location /gitlab/>
    Require all granted

    ProxyPassReverse http://127.0.0.1:8181
    ProxyPassReverse http://mydomain.com/gitlab/
  </Location>

  RewriteEngine on

  RewriteCond %{DOCUMENT_ROOT}/%{REQUEST_FILENAME} !-f [OR]
  RewriteCond %{REQUEST_URI} ^/uploads/.*
  RewriteRule .* http://127.0.0.1:8181%{REQUEST_URI} [P,QSA,NE]

  RequestHeader set X_FORWARDED_PROTO 'https'
  RequestHeader set X-Forwarded-Ssl on

  DocumentRoot /home/git/gitlab/public

  ErrorDocument 404 /404.html
  ErrorDocument 422 /422.html
  ErrorDocument 500 /500.html
  ErrorDocument 502 /502.html
  ErrorDocument 503 /503.html

  LogFormat "%{X-Forwarded-For}i %l %u %t \"%r\" %>s %b" common_forwarded
  ErrorLog /var/log/httpd/logs/YOUR_SERVER_FQDN_error.log
  CustomLog /var/log/httpd/logs/YOUR_SERVER_FQDN_forwarded.log common_forwarded
  CustomLog /var/log/httpd/logs/YOUR_SERVER_FQDN_access.log combined env=!dontlog
  CustomLog /var/log/httpd/logs/YOUR_SERVER_FQDN.log combined

</VirtualHost>

/etc/httpd/conf.d/kibana.conf

<VirtualHost *:443>
 ProxyRequests off
 SSLEngine on
 SSLProxyCheckPeerCN off
 SSLProxyCheckPeerName off
 SSLCertificateFile /etc/letsencrypt/live/mydomain.com/cert.pem
 SSLCertificateKeyFile /etc/letsencrypt/live/mydomain.com/privkey.pem
 SSLCertificateChainFile /etc/letsencrypt/live/mydomain.com/chain.pem

<Location /kibana/>
  ProxyPass http://192.168.xx.xx:5601/
  ProxyPassReverse https://mydomain.com/kibana/
  ProxyPassReverseCookieDomain 192.168.xx.xx:5601 mydomain.com
  ProxyPassReverseCookiePath / /kibana/
  RewriteRule "^/kibana/(.*)$" "/$1" [L,PT]
  Substitute "s|http://192.168.xx.xx:5601/|https://mydomain.com/kibana/|q"
</Location>
</VirtualHost>

/etc/httpd/conf.d/ssl.conf

Listen 443 https

SSLPassPhraseDialog exec:/usr/libexec/httpd-ssl-pass-dialog

SSLSessionCacheTimeout  300

SSLRandomSeed startup file:/dev/urandom  256
SSLRandomSeed connect builtin

SSLCryptoDevice builtin

<VirtualHost mydomain.com:443>

DocumentRoot "/var/www/html"
ServerName mydomain.com:443

ErrorLog logs/ssl_error_log
TransferLog logs/ssl_access_log
LogLevel warn

SSLEngine on

SSLProtocol all -SSLv2 -SSLv3

SSLCipherSuite HIGH:3DES:!aNULL:!MD5:!SEED:!IDEA

SSLCertificateFile /etc/letsencrypt/live/mydomain.com/cert.pem

SSLCertificateKeyFile /etc/letsencrypt/live/mydomain.com/privkey.pem

SSLCertificateChainFile /etc/letsencrypt/live/mydomain.com/chain.pem

<Files ~ "\.(cgi|shtml|phtml|php3?)$">
    SSLOptions +StdEnvVars
</Files>
<Directory "/var/www/cgi-bin">
    SSLOptions +StdEnvVars
</Directory>

BrowserMatch "MSIE [2-5]" \
         nokeepalive ssl-unclean-shutdown \
         downgrade-1.0 force-response-1.0

CustomLog logs/ssl_request_log \
          "%t %h %{SSL_PROTOCOL}x %{SSL_CIPHER}x \"%r\" %b"

</VirtualHost>

不足している情報等ありましたら、できる限りお伝えしたいと思います
よろしくお願いいたします

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 1

0

同じドメイン名:ポートの組み合わせの VirtualHost は、複数設定できませんので同じ場合は、最初の記載された(読み込まれた)内容が有効になります。

おそらく Apache 起動時に VirtualHost が重複しているとメッセージが出いると思われます。

同じドメインの VirtualHost は、記載内容を整理して、1つの VirtualHost にまとめて記載するようにしてください。

設定ファイルを見た感じでは、 ssl.conf の中の VirtualHost に 他の conf ファイルの VirtualHost 設定の内容を入れるのが良いと思われます。

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2019/05/25 12:15 編集

    ご回答ありがとうございます。
    本日、ご教示いただいた内容を試してみました。
    設定を整理し、一つのコンフィグにまとめたのですが、下記のエラーが出て起動できない状況となってしまいました。
    調べてみたところモジュールがロードされていないという原因をよく見ましたが、変更する前のコンフィグでは動作していたためモジュールの有無が原因ではないと思いました。
    しかし、それだと原因がわからず、といった状況です。

    [systemctl status httpd]
    ============================
    ● httpd.service - The Apache HTTP Server
    Loaded: loaded (/usr/lib/systemd/system/httpd.service; disabled; vendor preset: disabled)
    Active: failed (Result: exit-code) since 土 2019-05-25 11:58:30 JST; 14min ago
    Docs: man:httpd(8)
    man:apachectl(8)
    Process: 23039 ExecStop=/bin/kill -WINCH ${MAINPID} (code=exited, status=1/FAILURE)
    Process: 23037 ExecStart=/usr/sbin/httpd $OPTIONS -DFOREGROUND (code=exited, status=1/FAILURE)
    Main PID: 23037 (code=exited, status=1/FAILURE)

    5月 25 11:58:30 reverse_proxy systemd[1]: Starting The Apache HTTP Server...
    5月 25 11:58:30 reverse_proxy httpd[23037]: AH00526: Syntax error on line 63 of /etc/httpd/conf.d/ssl.conf:
    5月 25 11:58:30 reverse_proxy httpd[23037]: Invalid command 'PreserveHost', perhaps misspelled or defined by a module not included in the server configuration
    5月 25 11:58:30 reverse_proxy systemd[1]: httpd.service: main process exited, code=exited, status=1/FAILURE
    5月 25 11:58:30 reverse_proxy kill[23039]: kill: cannot find process ""
    5月 25 11:58:30 reverse_proxy systemd[1]: httpd.service: control process exited, code=exited status=1
    5月 25 11:58:30 reverse_proxy systemd[1]: Failed to start The Apache HTTP Server.
    5月 25 11:58:30 reverse_proxy systemd[1]: Unit httpd.service entered failed state.
    5月 25 11:58:30 reverse_proxy systemd[1]: httpd.service failed.
    ```
    ============================
    [/etc/httpd/conf.d/ssl.conf]
    ============================
    Listen 443 https

    ProxyPass /blog !

    SSLPassPhraseDialog exec:/usr/libexec/httpd-ssl-pass-dialog

    SSLSessionCache shmcb:/run/httpd/sslcache(512000)
    SSLSessionCacheTimeout 300

    SSLRandomSeed startup file:/dev/urandom 256
    SSLRandomSeed connect builtin
    SSLCryptoDevice builtin

    SSLCompression Off
    ServerSignature off
    AllowEncodedSlashes NoDecode

    <VirtualHost mydomain.com:443>

    DocumentRoot "/var/www/html"
    ServerName mydomain.com:443

    ErrorLog logs/ssl_error_log
    TransferLog logs/ssl_access_log
    LogLevel warn

    SSLEngine on

    SSLProtocol all -SSLv2 -SSLv3

    SSLHonorCipherOrder on

    SSLCipherSuite "ECDH+AESGCM:DH+AESGCM:ECDH+AES256:DH+AES256:ECDH+AES128:DH+AES:ECDH+3DES:DH+3DES:RSA+AESGCM:RSA+AES:RSA+3DES:!aNULL:!MD5:!DSS"

    Header add Strict-Transport-Security: "max-age=15768000;includeSubdomains"
    SSLCertificateFile /etc/letsencrypt/live/mydomain.com/cert.pem
    SSLCertificateKeyFile /etc/letsencrypt/live/mydomain.com/privkey.pem
    SSLCertificateChainFile /etc/letsencrypt/live/mydomain.com/chain.pem


    <Files ~ "\.(cgi|shtml|phtml|php3?)$">
    SSLOptions +StdEnvVars
    </Files>
    <Directory "/var/www/cgi-bin">
    SSLOptions +StdEnvVars
    </Directory>

    <Location /gitlab/>
    Require all granted

    ProxyPassReverse http://127.0.0.1:8181
    ProxyPassReverse http://mydomain.com/gitlab/
    RewriteEngine on
    PreserveHost On
    RewriteCond %{DOCUMENT_ROOT}/%{REQUEST_FILENAME} !-f [OR]
    RewriteCond %{REQUEST_URI} ^/uploads/.*
    RewriteRule .* http://127.0.0.1:8181%{REQUEST_URI} [P,QSA,NE]
    RequestHeader set X_FORWARDED_PROTO 'https'
    RequestHeader set X-Forwarded-Ssl on
    DocumentRoot /home/git/gitlab/public
    ErrorDocument 404 /404.html
    ErrorDocument 422 /422.html
    ErrorDocument 500 /500.html
    ErrorDocument 502 /502.html
    ErrorDocument 503 /503.html

    LogFormat "%{X-Forwarded-For}i %l %u %t \"%r\" %>s %b" common_forwarded
    ErrorLog /var/log/httpd/logs/YOUR_SERVER_FQDN_error.log
    CustomLog /var/log/httpd/logs/YOUR_SERVER_FQDN_forwarded.log common_forwarded
    CustomLog /var/log/httpd/logs/YOUR_SERVER_FQDN_access.log combined env=!dontlog
    CustomLog /var/log/httpd/logs/YOUR_SERVER_FQDN.log combined

    </Location>

    <Location /kibana/>
    SSLProxyCheckPeerCN off
    SSLProxyCheckPeerName off
    ProxyPass http://192.168.xx.xx:5601/
    ProxyPassReverse https://mydomain.com/kibana/
    ProxyPassReverseCookieDomain 192.168.50.7:5601 mydomain.com
    ProxyPassReverseCookiePath / /kibana/
    RewriteRule "^/kibana/(.*)$" "/$1" [L,PT]
    Substitute "s|http://192.168.xx.xx:5601/|https://mydomain.com/kibana/|q"
    </Location>

    BrowserMatch "MSIE [2-5]" \
    nokeepalive ssl-unclean-shutdown \
    downgrade-1.0 force-response-1.0

    CustomLog logs/ssl_request_log \
    "%t %h %{SSL_PROTOCOL}x %{SSL_CIPHER}x \"%r\" %b"

    </VirtualHost>
    ============================

    キャンセル

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 88.77%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る