저는 Raspberry Pi3에서 실행되는 Apache2 인스턴스에서 두 개의 웹 사이트를 자체 호스팅합니다(버전 및 구성에 대한 자세한 내용은 아래 참조). Website1은 제가 처음부터 코딩한 정적 웹 사이트이고, 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
두 개의 웹사이트가 활성화된 경우
$ 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가 더 문제가 됩니다. 문이 닫혀 있음에도 불구하고(적어도 포트 검사기에 따르면) 다음에서 website1(아파치의 기본 서버)을 볼 수 있습니다.
- 내부 IP 주소: 192.168.1.100:XX
- 공개 IP 주소: {my-public-ip}:XX
- 동적 DNS 호스트 이름 mydomain.ddns.net
하지만 이 방법으로는 website1에만 접속할 수 있고 website2에는 접속할 수 없기 때문에 website1을 비활성화하고 ( ) Apache를 다시 시작하려고했습니다 sudo a2dissite website1.com.conf
( 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나 DDNS 호스트 이름에서는 여전히 website2에 액세스할 수 없습니다.
워드프레스 URL 변경
나는 이것이 Wordpress와 관련이 있을 것이라고 생각했고 실제로 발견했습니다.이 기사[데이터베이스에서 직접 URL을 변경][2]하라는 지침을 따랐습니다. 실제로 'home' 및 'url' 값은 이전 공용 고정 IP와 동일했기 때문에 DDNS(myhostname.ddns.net)로 변경했습니다. 그런데 아직 사이트 접속이 안되네요
참고로, 내 최우선 순위는웹사이트에 접속할 수 있도록 2내부 또는 외부 IP 또는 DDNS 호스트 nmae를 통해 내용을 볼 수 있습니다.
답변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을 선택하세요.
작동한다면 해당 웹사이트가 외부 IP 주소를 가리키도록 호스트 파일을 변경하세요.
설명: 웹 브라우저와 웹 서버 간 핸드셰이크의 일부에는 사용자가 요청하는 사이트가 포함됩니다. 이를 통해 동일한 웹 서버에서 둘 이상의 사이트를 호스팅할 수 있습니다. Apache 구성에는 별칭이 www.website1.com 및 www.website2.com으로 명시되어 있지만 IP 주소에 대한 웹 사이트를 요청하고 있습니다. Apache는 www.website1.com이 기본 사이트로 설정되어 있으므로 응답했습니다.
답변2
결국 그것은 라우터 구성이었습니다. 수신 포트(WAN 포트)는 80으로 설정되어야 하고, 내부 포트(LAN 포트)는 내 라우터가 수신하는 포트로 설정되어야 합니다.