Мой веб-сервер LAMP не работает после переезда в новый дом

Мой веб-сервер LAMP не работает после переезда в новый дом

Я размещаю два веб-сайта на сервере Apache2, работающем на Raspberry Pi3 (более подробная информация о версиях и конфигурациях приведена ниже): Website1 — это статический веб-сайт, который я написал с нуля, а website2 работает на Wordpress.

Я жил в квартире, где провайдер предоставлял статический публичный IP, но недавно переехал в новый дом, где провайдер не предоставляет такой возможности. Я пытался все перенастроить, но не могу заставить все работать снова.

Конфигурации

У меня Raspberry Pi 3, на котором установлена ​​последняя версия Raspbian.

$ 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) я открылпорт XX для httpипорт YY для ssh(Я не использую стандартные порты для повышения безопасности)

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

с двумя включенными веб-сайтами

$ 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

The/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

Я установил динамический DNS с NoIP (mydomain.ddns.net), который обновляется через мой маршрутизатор.

Что работает, а что нет

  • SSH работает отлично, и я могу подключиться к своему Raspberry Pi как внутри домашней сети, так и извне. Когда я проверяю, открыта ли дверь YY с помощью инструмента проверки портов, я получаю положительный ответ.

  • HTTP более проблематичен: несмотря на то, что дверь закрыта (по крайней мере, по данным проверки портов), я могу видеть website1 (который является сервером Apache по умолчанию) из

    • внутренний IP-адрес: 192.168.1.100:XX
    • публичный IP-адрес: {my-public-ip}:XX
    • динамическое DNS-имя хоста mydomain.ddns.net

Однако, поскольку таким образом я могу получить доступ только к website1, а не к website2, я попробовал отключить website1 ( sudo a2dissite website1.com.conf) и перезапустить 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

Однако я по-прежнему не могу получить доступ к website2 ни с внутреннего, ни с публичного IP-адреса, ни с имени хоста DDNS.

Изменение URL-адреса Wordpress

Я думал, что это может быть связано с Wordpress, и действительно, я обнаружилЭта статьяи следовал инструкциям, чтобы [изменить URL-адрес непосредственно в базе данных][2]. Действительно, значения «home» и «url» были равны моему старому общедоступному статическому IP-адресу, поэтому я изменил его на свой DDNS (myhostname.ddns.net). Однако сайт по-прежнему недоступен

К вашему сведению, моим главным приоритетом было бычтобы иметь возможность получить доступ к веб-сайту2и просмотреть его содержимое, будь то через внутренний или внешний IP, или DDNS hostnmae.

решение1

Так что, я думаю, я понял... возможно... Проблема может быть в том, как вы это тестируете. На компьютере, который вы используете для тестирования (не RPi), отредактируйте файл hosts, чтобы указать и www.website1.com, и www.website2.com на внутренний IP-адрес вашего RPi (при этом вы находитесь в одной сети).

Инструкции по файлу hosts: https://www.howtogeek.com/howto/27350/beginner-geek-how-to-edit-your-hosts-file/

Затем откройте в своем браузере сайт www.website1.com, а затем www.website2.com.

Если это сработает, измените файл hosts, чтобы направить эти веб-сайты на ваш внешний IP-адрес.

Объяснение: Часть рукопожатия между веб-браузером и веб-сервером включает в себя то, какой сайт вы запрашиваете. Это позволяет размещать более одного сайта на одном веб-сервере. Поскольку в вашей конфигурации Apache указаны псевдонимы www.website1.com и www.website2.com, но вы запрашиваете веб-сайт для вашего IP-адреса. Apache ответил www.website1.com, потому что он установлен в качестве вашего сайта по умолчанию.

решение2

В конце концов, дело было в настройке маршрутизатора: входящий порт (порт WAN) должен быть установлен на 80, а внутренний порт (порт LAN) — на тот порт, который прослушивает мой маршрутизатор.

Связанный контент