![使託管在本機電腦上的 apache 網站可以從外部存取](https://rvso.com/image/1615259/%E4%BD%BF%E8%A8%97%E7%AE%A1%E5%9C%A8%E6%9C%AC%E6%A9%9F%E9%9B%BB%E8%85%A6%E4%B8%8A%E7%9A%84%20apache%20%E7%B6%B2%E7%AB%99%E5%8F%AF%E4%BB%A5%E5%BE%9E%E5%A4%96%E9%83%A8%E5%AD%98%E5%8F%96.png)
我有一個正在運行的 apache2 伺服器,在 LAN 上託管一個 Moodle 站點,可以透過 存取http://192.x.x.x/moodle
。我還有一台位於 Internet 和 LAN 之間的 Linux 伺服器,具有即時 IP 位址124.x.x.x
。我想讓 Moodle 網站可以透過 Internet 存取。是否可以?
本機 apache2 伺服器有一個工作配置來提供服務moodle.domain.com
。實時 Linux 伺服器還有一個 apache2 伺服器託管domain.com
。兩者都運行 Debian Linux
我嘗試從實時 Linux 伺服器的檔案重定向moodle.domain.com
到,但是,這仍然是我從外部訪問時獲得的。192.x.x.x
/etc/hosts
domain.com
moodle.domain.com
當我從外部存取時,我首先在 Windows 筆記型電腦中設定主機檔案以重定向moodle.domain.com
到 Linux 伺服器的即時 IP 位址。
我在這裡缺少什麼?
答案1
我透過在實時 Linux Apache 伺服器中實作 Apache 反向代理來使其工作。
對於那些正在尋找相同解決方案的人,這是我的片段/etc/apache2/sites-enabled/000-default.conf
:
<VirtualHost *:80>
ServerName moodle.domain.com
ProxyPreserveHost On
ProxyRequests Off
ProxyPass / http://10.5.1.100:8080/
ProxyPassReverse / http://10.5.1.100:8080/
</VirtualHost>
託管實際 Moodle 網站的本機 Apache 伺服器應該偵聽連接埠8080
:
<VirtualHost *:8080>
ServerAdmin webmaster@local
DocumentRoot /srv/www/moodle
ServerName moodle.domain.com
ServerAlias moodle.domain.com
<Directory /srv/www/moodle>
#Allowoverride all ###Uncomment if required
</Directory>
</VirtualHost>
另一個我需要調整的 Moodle 特定設定是 Moodle 設定檔/srv/www/moodle/config.php
:
$CFG->wwwroot = 'http://moodle.domain.com';
Moodle 最初在安裝過程中將其設定為$CFG->wwwroot = 'http://10.5.1.100/moodle';
。如果您沒有安裝Moodle,則忽略此部分
答案2
在我們開始之前,我想確保您明白這樣做並不是最安全的選擇。特別是透過打開路由器端口,所以請確保您了解防火牆。
由於您有一個動態 IP(我假設),因此您不能簡單地將其綁定到您的網域。這是因為您的 IP 每隔幾個小時就會改變一次。
這個答案是基於最常見的可用路由器選項。
- 您必須在路由器連線中找到您的apache 伺服器,並啟動連接埠轉送(80),或者,如果您了解自己在做什麼並初始化了適當的防火牆,您可以簡單地開啟所有路由器連接埠(我強烈建議您不要這樣做除非你有防火牆)
- 使用免費的 DNS 服務,如 Dyn DNS(大多數最新的路由器都支援開箱即用,只需檢查設定並設定帳戶)。
- 建立免費的 DNS 子網域。
- 從您的主網域建立 DNS 規則 (CNAME)。並將其指向您建立的 dyndns 子網域。例如,moodle.example.com -> trex-moodle.exampledyndns.com。
- 設定您的 apache 並新增您的 dyndns 子網域。
在路由器中使用免費 dns 是最好的選擇,因為您的路由器每隔幾個小時輪換一次 IP,如果您使用此類服務,您的 dyn dns 網域將始終指向您的家庭 IP 位址。
編輯
關於第一條評論,您需要在主 Linux 伺服器上執行 nginx 代理程式。 nginx可用於託管網站domain.com
和moodle.domain.com,該網站託管在同一網路的不同伺服器中。
確保您可以從 Linux 伺服器存取 Moodle 網站。 (使用ping IP)
現在在您的 nginx 中您需要進行以下設定:
server {
listen 80;
server_name domain.com;
root /your/domain.com/path/goes/here ;
}
server {
listen 80;
server_name moodle.trex.com;
location / {
proxy_pass http://192.X.X.X:80; #Your apache2 server local IP address
}
}
為此,Linux 伺服器和 apache2 伺服器必須位於同一 192.XXX 網路下。