Ich hoste zwei Websites selbst auf einer Apache2-Instanz, die auf einem Raspberry Pi3 läuft (weitere Informationen zu Versionen und Konfigurationen weiter unten): Website1 ist eine statische Website, die ich von Grund auf neu programmiert habe, während Website2 auf Wordpress läuft.
Ich habe früher in einer Wohnung gelebt, in der mir der ISP eine statische öffentliche IP-Adresse zur Verfügung gestellt hat, bin aber vor Kurzem in ein neues Haus gezogen, in dem der ISP diese Option nicht anbietet. Ich habe versucht, alles neu zu konfigurieren, aber ich bekomme es nicht wieder zum Laufen.
Konfigurationen
Ich habe einen Raspberry Pi 3 mit der neuesten Version von 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"
Auf meinem Router (Modell: Alcatel-Lucent G240W-B
) habe ich geöffnetPort XX für httpUndPort YY für SSH(Ich verwende keine Standardports, um die Sicherheit zu erhöhen)
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
Ich verwende Apache2
$ apache2 -v
Server version: Apache/2.4.25 (Raspbian)
Server built: 2019-08-19T19:25:31
mit zwei aktivierten Websites
$ 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
Das ist meinports.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
Der/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
Und das Das/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
Ich habe einen dynamischen DNS mit NoIP (mydomain.ddns.net) eingerichtet, der über meinen Router aktualisiert wird
Was funktioniert und was nicht
SSH funktioniert einwandfrei und ich kann mich sowohl innerhalb meines Heimnetzwerks als auch von außerhalb mit meinem Raspberry Pi verbinden - wenn ich mit einem Port-Checking-Tool überprüfe, ob Tür YY offen ist, erhalte ich eine positive Antwort
HTTP ist problematischer: obwohl die Tür geschlossen ist (zumindest laut Port-Checkern), kann ich website1 (das ist der Standardserver von Apache) von
- interne IP-Adresse: 192.168.1.100:XX
- öffentliche IP-Adresse: {my-public-ip}:XX
- dynamischer DNS-Hostname meineDomäne.ddns.net
Da ich auf diese Weise jedoch nur auf Website1 und nicht auf Website2 zugreifen kann, habe ich versucht, Website1 ( sudo a2dissite website1.com.conf
) zu deaktivieren und Apache ( sudo systemctl restart apache2
) neu zu starten.
$ 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
Ich kann jedoch weiterhin weder von der internen oder öffentlichen IP-Adresse noch vom DDNS-Hostnamen auf Website2 zugreifen.
Ändern der Wordpress-URL
Ich dachte, das könnte mit Wordpress zusammenhängen und fand tatsächlichDieser Artikelund folgte den Anweisungen, um [die URL direkt in der Datenbank zu ändern][2]. Tatsächlich stimmten die Werte für „home“ und „url“ mit meiner alten öffentlichen statischen IP überein, also änderte ich sie in mein DDNS (myhostname.ddns.net). Die Site ist jedoch immer noch nicht erreichbar
Zu Ihrer Information, meine erste Priorität wäreum auf website2 zugreifen zu könnenund sehen Sie sich dessen Inhalt an, sei es über die interne oder externe IP oder den DDNS-Hostnamen.
Antwort1
Also, ich glaube, ich verstehe es ... vielleicht ... Das Problem könnte an der Art und Weise liegen, wie Sie das testen. Bearbeiten Sie auf dem Computer, den Sie zum Testen verwenden (nicht dem RPi), Ihre Host-Datei so, dass sowohl www.website1.com als auch www.website2.com auf die interne IP-Adresse Ihres RPi verweisen (während Sie sich im selben Netzwerk befinden).
Anweisungen zur Hosts-Datei: https://www.howtogeek.com/howto/27350/beginner-geek-how-to-edit-your-hosts-file/
Richten Sie Ihren Browser dann auf www.website1.com und dann auf www.website2.com.
Wenn das funktioniert, ändern Sie Ihre Hosts-Datei, um diese Websites auf Ihre externe IP-Adresse zu verweisen.
Erklärung: Ein Teil des Handshakes zwischen dem Webbrowser und dem Webserver umfasst die Angabe, welche Site Sie anfordern. Dadurch können mehrere Sites auf demselben Webserver gehostet werden. In Ihrer Apache-Konfiguration sind die Aliase als www.website1.com und www.website2.com angegeben, Sie fragen jedoch nach der Website für Ihre IP-Adresse. Apache hat mit www.website1.com geantwortet, da dies als Ihre Standardsite festgelegt ist.
Antwort2
Letztendlich lag es an der Router-Konfiguration: Der eingehende Port (WAN-Port) sollte auf 80 eingestellt werden und der interne Port (LAN-Port) auf den Port, auf dem mein Router lauscht.