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

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

新規登録して質問してみよう
ただいま回答率
85.48%
Apache

Apacheは、Apache HTTP Serverの略で、最も人気の高いWebサーバソフトウェアの一つです。安定性が高いオープンソースソフトウェアとして商用サイトから自宅サーバまで、多くのプラットフォーム向けに開発・配布されています。サーバーソフトウェアの不具合(NCSA httpd)を修正するパッチ(a patch)を集積、一つ独立したソフトウェアとして開発されました。

Ubuntu

Ubuntuは、Debian GNU/Linuxを基盤としたフリーのオペレーティングシステムです。

WordPress

WordPressは、PHPで開発されているオープンソースのブログソフトウェアです。データベース管理システムにはMySQLを用いています。フリーのブログソフトウェアの中では最も人気が高く、PHPとHTMLを使って簡単にテンプレートをカスタマイズすることができます。

Q&A

解決済

2回答

2346閲覧

wordpressを別サーバーのapache2のリバースプロキシー経由で呼び出したい

cp0831

総合スコア11

Apache

Apacheは、Apache HTTP Serverの略で、最も人気の高いWebサーバソフトウェアの一つです。安定性が高いオープンソースソフトウェアとして商用サイトから自宅サーバまで、多くのプラットフォーム向けに開発・配布されています。サーバーソフトウェアの不具合(NCSA httpd)を修正するパッチ(a patch)を集積、一つ独立したソフトウェアとして開発されました。

Ubuntu

Ubuntuは、Debian GNU/Linuxを基盤としたフリーのオペレーティングシステムです。

WordPress

WordPressは、PHPで開発されているオープンソースのブログソフトウェアです。データベース管理システムにはMySQLを用いています。フリーのブログソフトウェアの中では最も人気が高く、PHPとHTMLを使って簡単にテンプレートをカスタマイズすることができます。

0グッド

0クリップ

投稿2020/01/28 08:26

外部からアクセスするサーバーにApacheのリバースプロクシーを設定して内部のサーバーのWordpressを導入しているサーバーにアクセスさせようとしています。

外部からアクセスするURLのイメージは「https://myserver.com/wpsite/」とします。

現在、外部からアクセスすると、内部サーバーのWordpressのサイトが表示されるのですが、Webページに埋め込まれたリンクが、内部サーバーのURLに成っている関係で正しく動きません。

例えば、以下のようなHTMLが展開されます。

<link rel="alternate" type="application/rss+xml" title="wpsite&raquo; フィード" href="http://**192.168.1.123**/wpsite/index.php/feed/" />

Wordpressの管理ページに対して外部からアクセスする要望はないので、あくまでも実際のサイトが動けばよいのですが・・・

何か情報があれば教えて頂けないでしょうか?

■ サーバーA(外部公開しているサーバー)
・OS:ubuntu 18.04
・Apache2 2.4.29
・Apache2に対するプロクシー定義
ProxyRequests Off
<Proxy *>
Require all granted
</Proxy>
SSLProxyEngine On
SSLProxyCheckPeerCN off
SSLProxyCheckPeerName off
SSLCertificateFile /etc/letsencrypt/live/myserver.com/fullchain.pem
SSLCertificateKeyFile /etc/letsencrypt/live/myserver.com/privkey.pem

ProxyPass /wpsite http://192.168.1.123/wpsite/
ProxyPassReverse /wpsite http://192.168.1.123/wpsite/

■ サーバーB(内部で運用しているサーバー)
OS:ubuntu 18.04
IP:192.168.1.123
Apache2 2.4.29
Wordpress 2.4.29
ネットワーク内部から確認可能なURLのイメージ:https://192.168.1.123/wpsite/

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

一応、最終的なまとめとして書き直しておきます。

サーバーBについては、普通にhttps://192.168.1.123/wpsite/で参照できる状態とします。

サーバーAの設定として実施したのは以下の通りです。

■ apache2導入
$ sudo apt -y install apache2
$ sudo systemctl enable apache2
$ sudo systemctl start apache2

■ リバースプロクシー設定有効化
$ sudo a2enmod proxy
$ sudo a2enmod proxy_http

■ URL書き換え有効化
$ sudo a2enmod substitute

■ apache SSL有効化
$ sudo a2ensite default-ssl
$ sudo a2enmod ssl
$ sudo a2enmod headers

■ 認証ファイルに関する設定
自己証明書等

■ confファイルに対して定義した内容
ServerTokens Prod
DirectoryIndex index.html index.htm
ServerName myserver.com
ServerAdmin abcdefg@gmail.com
ProxyRequests Off
<Proxy *>
Order deny,allow
Allow from all
</Proxy>
DocumentRoot /var/www/html
<Directory /var/www/>
Options FollowSymLinks
AllowOverride None
Require all granted
</Directory>

SSLProxyEngine On
SSLProxyCheckPeerCN off
SSLProxyCheckPeerName off

SSLCertificateFile 証明書ファイルの場所
SSLCertificateKeyFile 証明書ファイルの場所

<Location /wpsite>
ProxyPass http://192.168.1.123/wpsite
ProxyPassReverse http://192.168.1.123/wpsite
ProxyPassReverseCookieDomain 192.168.1.123 myserver.com
ProxyPassReverseCookiePath / /wpsite/
RequestHeader unset Accept-Encoding
AddOutputFilterByType SUBSTITUTE text/plain text/html application/javascript text/javascript
Substitute "s|http://192.168.1.123/|https://myserver.com/|q"
</Location>

上記のConfファイルの設定の以下の部分が今回の対応のキモです
AddOutputFilterByType SUBSTITUTE text/plain text/html application/javascript text/javascript
Substitute "s|http://192.168.1.123/|https://myserver.com/|q"

これによって、内部アドレスが外部に展開するHTMLに乗ってしまうことを回避可能です。

ただし、これ以外に私が実施したケースではwordpressでemojiを入力可能にするためのスクリプトが自動展開する部分に内部IPアドレスが含まれる現象が確認されました。

これについては、絵文字を使用する必要もなかったので、プラグイン「Disable Emojis (GDPR friendly)」を使うことで生成されないようにする対応を行いました。

投稿2020/01/31 04:58

cp0831

総合スコア11

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

ベストアンサー

WordPressの管理画面で外向きのドメインに設定変更すればとりあえずアクセスはできそうな気もしますが、一般的にはmod_substituteなどを使うのではないでしょうか。

https://qiita.com/Y-Koyama/items/463fa7d363e158a1d4c5
https://qiita.com/tkykmw/items/d7f07f26b89f923d57d5

投稿2020/01/28 09:17

Takumiboo

総合スコア2534

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

cp0831

2020/01/29 07:24

ありがとうございます。 substituteはやったことがなかったので、以下のように有効にして $ sudo a2enmod proxy proxy_http substitute 以下のように設定することで狙いのサイトのトップページが表示されました。 <Location /website> ProxyPass https://192.168.1.123/website ProxyPassReverse https://192.168.1.123/website AddOutputFilterByType SUBSTITUTE text/plain text/html application/javascript text/javascript Substitute "s|https://192.168.1.123/|https://myserver.com/|q" </Location> しかし、表示されたサイトと同じ階層のURLに遷移する場合は問題ないのですが、配下の階層に遷移するような場合に正しく遷移できません。 具体的には・・・ https://myserver.com/website で正しく表示してからwordpressの投稿に対するリンクをクリックした場合に正しく動きません。 この時に、HTML上のリンクは以下のようになっています。 https://myserver.com/website/index.php/2020/01/29/hello-world/ しかし、実際に遷移した後にURLに表示されるのは以下のようになっています。 https://myserver.com/websiteindex.php/2020/01/29/hello-world/ ページはNot Foundとなります。 このようにwebsiteの後ろのスラッシュが消えて表示されます。 これは、URLを直接入力した場合でも同様です。 何か、考えられることはあるでしょうか?
Takumiboo

2020/01/29 09:10

ProxyPassあたりの末尾のスラッシュの有無じゃないでしょうか
cp0831

2020/01/31 04:44

末尾のスラッシュによって下層のURLに対しても転送するかどうかが決まるというのが原因でした。 ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問