私は、Raspberry Pi3 で実行される Apache2 インスタンスで 2 つの Web サイトを自分でホストしています (バージョンと構成の詳細については以下を参照)。Website1 は私が最初からコーディングした静的 Web サイトであり、website2 は Wordpress で実行されます。
以前、ISP が静的パブリック IP を提供していたアパートに住んでいましたが、最近、ISP がそのオプションを提供していない新しい家に引っ越しました。すべてを再設定しようとしましたが、すべてを再び機能させることができません。
構成
私はRaspbianの最新バージョンを実行しているRaspberry Pi 3を持っています
$ cat /etc/os-release
PRETTY_NAME="Raspbian GNU/Linux 9 (stretch)"
NAME="Raspbian GNU/Linux"
VERSION_ID="9"
VERSION="9 (stretch)"
VERSION_CODENAME=stretch
ID=raspbian
ID_LIKE=debian
HOME_URL="http://www.raspbian.org/"
SUPPORT_URL="http://www.raspbian.org/RaspbianForums"
BUG_REPORT_URL="http://www.raspbian.org/RaspbianBugs"
私のルーター(モデル:)Alcatel-Lucent G240W-B
でhttp のポート XXそしてssh のポート YY(セキュリティを強化するために標準ポートは使用していません)
Application Name | WAN Connection | WAN Port | LAN Port | Internal Client | Protocol | Status
Customer settings | {my_wan_connection} | XX~XX | XX~XX | 192.168.1.100 | TCPorUDP | ACTIVE
Customer settings | {my_wan_connection} | YY~YY | YY~YY | 192.168.1.100 | TCPorUDP | ACTIVE
私はapache2を実行しています
$ apache2 -v
Server version: Apache/2.4.25 (Raspbian)
Server built: 2019-08-19T19:25:31
2つのウェブサイトが有効
$ sudo apache2ctl -S
VirtualHost configuration:
*:XX is a NameVirtualHost
default server mydomain.ddns.net (/etc/apache2/sites-enabled/website1.com.conf:1)
port XX namevhost mydomain.ddns.net (/etc/apache2/sites-enabled/website1.com.conf:1)
alias website1.com
alias www.website1.com
port XX namevhost mydomain.ddns.net (/etc/apache2/sites-enabled/website2.com.conf:1)
alias www.wesbiste2.com
alias wesbiste2.com
ServerRoot: "/etc/apache2"
Main DocumentRoot: "/var/www/html"
Main ErrorLog: "/var/log/apache2/error.log"
Mutex watchdog-callback: using_defaults
Mutex rewrite-map: using_defaults
Mutex default: dir="/var/run/apache2/" mechanism=default
Mutex mpm-accept: using_defaults
PidFile: "/var/run/apache2/apache2.pid"
Define: DUMP_VHOSTS
Define: DUMP_RUN_CFG
Define: MODSEC_2.5
Define: MODSEC_2.9
User: name="www-data" id=33
Group: name="www-data" id=33
これは私のports.conf
$ sudo cat ports.conf
# If you just change the port or add more ports here, you will likely also
# have to change the VirtualHost statement in
# /etc/apache2/sites-enabled/000-default.conf
Listen 0.0.0.0:XX
<IfModule ssl_module>
Listen 443
</IfModule>
<IfModule mod_gnutls.c>
Listen 443
</IfModule>
# vim: syntax=apache ts=4 sw=4 sts=4 sr noet
の/etc/apache2/sites-enables/website1.conf
<VirtualHost *:XX>
# The ServerName directive sets the request scheme, hostname and port that
# the server uses to identify itself. This is used when creating
# redirection URLs. In the context of virtual hosts, the ServerName
# specifies what hostname must appear in the request's Host: header to
# match this virtual host. For the default virtual host (this file) this
# value is not decisive as it is used as a last resort host regardless.
# However, you must set it for any further virtual host explicitly.
#ServerName www.example.com
ServerAdmin [email protected]
ServerName mydomain.ddns.net
ServerAlias website1.com
ServerAlias www.website1.com
DocumentRoot /var/www/website1/public_html
# Available loglevels: trace8, ..., trace1, debug, info, notice, warn,
# error, crit, alert, emerg.
# It is also possible to configure the loglevel for particular
# modules, e.g.
#LogLevel info ssl:warn
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
# For most configuration files from conf-available/, which are
# enabled or disabled at a global level, it is possible to
# include a line for only one particular virtual host. For example the
# following line enables the CGI configuration for this host only
# after it has been globally disabled with "a2disconf".
#Include conf-available/serve-cgi-bin.conf
</VirtualHost>
# vim: syntax=apache ts=4 sw=4 sts=4 sr noet
そして、/etc/apache2/sites-enables/website2.conf
<VirtualHost *:XX>
# The ServerName directive sets the request scheme, hostname and port that
# the server uses to identify itself. This is used when creating
# redirection URLs. In the context of virtual hosts, the ServerName
# specifies what hostname must appear in the request's Host: header to
# match this virtual host. For the default virtual host (this file) this
# value is not decisive as it is used as a last resort host regardless.
# However, you must set it for any further virtual host explicitly.
#ServerName www.example.com
ServerAdmin [email protected]
ServerName mydomain.ddns.net
ServerAlias www.website2.com
ServerAlias website2.com
DocumentRoot /var/www/website2/public_html
# Available loglevels: trace8, ..., trace1, debug, info, notice, warn,
# error, crit, alert, emerg.
# It is also possible to configure the loglevel for particular
# modules, e.g.
#LogLevel info ssl:warn
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
# For most configuration files from conf-available/, which are
# enabled or disabled at a global level, it is possible to
# include a line for only one particular virtual host. For example the
# following line enables the CGI configuration for this host only
# after it has been globally disabled with "a2disconf".
#Include conf-available/serve-cgi-bin.conf
</VirtualHost>
# vim: syntax=apache ts=4 sw=4 sts=4 sr noet
私はルーターを通じて更新されるNoIP(mydomain.ddns.net)でダイナミックDNSを設定しました
何が機能し、何が機能しないか
SSHは正常に動作し、自宅のネットワーク内と外部の両方からラズベリーパイに接続できます。ポートチェックツールからドアYYが開いているかどうかを確認すると、肯定的な応答が得られます。
HTTPはもっと問題があります。ポートチェッカーによると、少なくともドアは閉じられているにもかかわらず、apacheのデフォルトサーバであるwebsite1が
- 内部 IP アドレス: 192.168.1.100:XX
- パブリック IP アドレス: {my-public-ip}:XX
- ダイナミック DNS ホスト名 mydomain.ddns.net
sudo a2dissite website1.com.conf
しかし、この方法ではウェブサイト1にしかアクセスできず、ウェブサイト2にはアクセスできないため、ウェブサイト1( )を無効にしてApache(sudo systemctl restart apache2
)を再起動しようとしました。
$ sudo apache2ctl -S
VirtualHost configuration:
*:XX mydomain.ddns.net (/etc/apache2/sites-enabled/website2.com.conf:1)
ServerRoot: "/etc/apache2"
Main DocumentRoot: "/var/www/html"
Main ErrorLog: "/var/log/apache2/error.log"
Mutex watchdog-callback: using_defaults
Mutex rewrite-map: using_defaults
Mutex default: dir="/var/run/apache2/" mechanism=default
Mutex mpm-accept: using_defaults
PidFile: "/var/run/apache2/apache2.pid"
Define: DUMP_VHOSTS
Define: DUMP_RUN_CFG
Define: MODSEC_2.5
Define: MODSEC_2.9
User: name="www-data" id=33
Group: name="www-data" id=33
ただし、内部 IP やパブリック IP、DDNS ホスト名からでも website2 にアクセスできません。
Wordpress URLの変更
これはWordpressに関連しているかもしれないと思ったのですが、実際にこの記事そして、[データベースで直接URLを変更する]という指示に従いました[2]。確かに、「home」と「url」の値は私の古いパブリック静的IPと同じだったので、DDNS(myhostname.ddns.net)に変更しました。しかし、サイトはまだアクセスできません。
ちなみに、私の最優先事項はウェブサイト2にアクセスできるようにする内部または外部 IP、あるいは DDNS ホスト名を介してその内容を確認できます。
答え1
それで、私は理解したと思います... 多分... 問題は、これをテストする方法にあるかもしれません。テストに使用しているコンピューター (RPi ではありません) で、ホスト ファイルを編集して、www.website1.com と www.website2.com の両方を RPi の内部 IP アドレスにポイントします (同じネットワーク上にいる場合)。
ホストファイルに関する説明: https://www.howtogeek.com/howto/27350/beginner-geek-how-to-edit-your-hosts-file/
次に、ブラウザで www.website1.com にアクセスし、次に www.website2.com にアクセスします。
それが機能する場合は、ホスト ファイルを変更して、それらの Web サイトを外部 IP アドレスにポイントします。
説明: Web ブラウザと Web サーバー間のハンドシェイクの一部には、要求するサイトが含まれます。これにより、同じ Web サーバーで複数のサイトをホストできます。Apache 構成ではエイリアスが www.website1.com および www.website2.com と指定されていますが、IP アドレスの Web サイトを要求しています。Apache は、デフォルト サイトとして設定されているため、www.website1.com で応答しました。
答え2
結局、それはルーターの設定でした。着信ポート (WAN ポート) は 80 に設定し、内部ポート (LAN ポート) はルーターがリッスンしているポートに設定する必要があります。