Yo mismo alojo dos sitios web en una instancia de Apache2 que se ejecuta en una Raspberry Pi3 (más información sobre versiones y configuraciones a continuación): el sitio web1 es un sitio web estático que codifiqué desde cero, mientras que el sitio web2 se ejecuta en Wordpress.
Solía vivir en un apartamento donde el ISP proporcionaba una IP pública estática, pero recientemente me mudé a una nueva casa, donde el ISP no ofrece esa opción. He estado intentando reconfigurar todo pero no puedo hacer que todo vuelva a funcionar.
Configuraciones
Tengo una Raspberry Pi 3 con la última versión de 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"
En mi enrutador (modelo Alcatel-Lucent G240W-B
:) he abiertopuerto XX para httpypuerto YY para ssh(No estoy usando puertos estándar para aumentar la seguridad)
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
Estoy ejecutando apache2
$ apache2 -v
Server version: Apache/2.4.25 (Raspbian)
Server built: 2019-08-19T19:25:31
con dos sitios web habilitados
$ 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
Este es miports.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
El/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
y el el/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
He configurado un DNS dinámico con NoIP (midominio.ddns.net) que se actualiza a través de mi enrutador
Qué funciona y qué no
SSH funciona bien y puedo conectarme a mi Raspberry Pi tanto dentro de mi red doméstica como desde fuera. Cuando compruebo si la puerta YY está abierta desde una herramienta de verificación de puertos, obtengo una respuesta positiva.
HTTP es más problemático: a pesar de que la puerta está cerrada (al menos según los verificadores de puertos), puedo ver el sitio web1 (que es el servidor predeterminado de Apache) desde
- dirección IP interna: 192.168.1.100:XX
- dirección IP pública: {mi-ip-pública}:XX
- nombre de host DNS dinámico midominio.ddns.net
Sin embargo, dado que de esta manera solo puedo acceder al sitio web1 y no al sitio web2, intenté deshabilitar el sitio web1 ( sudo a2dissite website1.com.conf
) y reiniciar 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
Sin embargo, todavía no puedo acceder al sitio web2 desde una IP pública o interna, ni desde el nombre de host DDNS.
Cambiar la URL de Wordpress
Pensé que esto podría estar relacionado con Wordpress y de hecho encontréEste artículoy seguí las instrucciones para [cambiar la URL directamente en la base de datos][2]. De hecho, los valores de 'inicio' y 'url' eran iguales a mi antigua IP estática pública, así que cambié a mi DDNS (myhostname.ddns.net). Sin embargo, el sitio aún es inaccesible.
Para su información, mi primera prioridad seríapara poder acceder al sitio web2y ver su contenido, ya sea a través de IP interna o externa, o hostnmae DDNS.
Respuesta1
Entonces creo que lo entiendo... tal vez... El problema podría ser la forma en que estás probando esto. En la computadora que está utilizando para realizar la prueba (no la RPi), edite su archivo host para que apunten tanto www.website1.com como www.website2.com a la dirección IP interna de su RPi (mientras esté en la misma red).
Instrucciones en el archivo de hosts: https://www.howtogeek.com/howto/27350/beginner-geek-how-to-edit-your-hosts-file/
Luego dirija su navegador a www.website1.com y luego a www.website2.com.
Si eso funciona, cambie su archivo de hosts para que apunte esos sitios web a su dirección IP externa.
Explicación: Parte del protocolo de enlace entre el navegador web y el servidor web incluye el sitio que está solicitando. Esto permite alojar más de un sitio en el mismo servidor web. Como su configuración de Apache indica los alias www.website1.com y www.website2.com, está solicitando el sitio web para su dirección IP. Apache respondió con www.website1.com porque está configurado como su sitio predeterminado.
Respuesta2
Al final fue la configuración del enrutador: el puerto entrante (puerto WAN) debe configurarse en 80 y el puerto interno (puerto LAN) en cualquier puerto que mi enrutador esté escuchando.