我在digitalocean中创建了一个Droplet,我可以使用一个vps_ip
在我的家里,连接到互联网的方式是:route + modem + adsl。
我在家里的本地电脑上建了一个wordpress
连接到网络时的净状态如下所示。
WAN:
MAC:ommitted for privacy
IP :public_ip PPPoE
subnet mask:255.255.255.255
gateway:153.0.68.1
DNS:114.114.114.114 223.5.5.5
LAN
MAC:ommitted for privacy
IP :192.168.1.1
subnet mask:255.255.255.0
DHCP:active
ifconfig
inet addr:192.168.1.100 Bcast:192.168.1.255 Mask:255.255.255.0
我的目标:让公众访问家用电脑上的wordpress网站,vps_ip digitalocean给了我。
感谢CrypticDesigns
https://www.digitalocean.com/community/questions/how-to-map-my-local-ip-192-168-1-100-with-my-vps_ip?
我已经在CrypticDesigns的帮助下解决了这个问题。
在我的本地网络中:
在我的路由器portforward端口80和私有IP 192.168.1.100到您的网络外部。
在公共液滴系统中:
sudo apt-get install nginx
sudo nano /etc/nginx/sites-available/default
server {
listen *:80;
server_name vps_ip;
rewrite .* http://publlic_ip$request_uri permanent;
}
sudo service nginx restart
任何访问vpsip的人都可以浏览我的wordpress
重要的是我的WAN上的ip地址每30分钟变化一次。大约30分钟后呢?
publicip会发生变化,配置文件/ etc / nginx / sites-available / default无法正常工作
我想对这个问题进行改进
我的意见是完成任务:
在我家里的电脑上
命令curl ipinfo.io/ip可以获取我的公共IP
每隔30分钟将其写入crontab
2.发送vpsip并在/ etc / nginx / sites-available / default中更改publicip的值
,并重新启动nginx。
如何用shell命令表达这两个步骤以使进程自动化?
答案 0 :(得分:1)
如果你谷歌“dyndns”,你会发现多个提供商免费提供“动态域名”。你应该注册其中一个。
有许多客户端会使动态域名与您的动态IP地址保持同步。您选择的dyndns提供商可能会获得有关适合其服务的客户所需的所有信息。只需在家用计算机和中提琴上运行客户端,动态多曼名称将始终指向您的动态IP!甚至一些家用路由器也可以为您更新动态域名,然后您甚至不必运行客户端。
然后将您的nginx配置更改为指向您的动态域名(而不是您的IP)。
答案 1 :(得分:1)
我正在使用基于Debian的发行版的ddclient
apt-get install ddclient
配置/etc/ddclient.conf
:
protocol=dyndns2
syslog=yes
ssl=yes
use=web, web=checkip.dynu.com/, web-skip='IP Address'
server=api.dynu.com
login=<your email>
password='<your password>'
<your subdomain>.dynu.com
它应该支持不同的协议和 dyndns提供商,我个人使用dynu.com多年,应该是免费的(我不确定新用户)
答案 2 :(得分:1)
我建议你使用proxy_pass
和upstream
,而不是rewrite
。这将确保您的网站始终可通过您的VPS提供商获得,而不会泄露您的动态IPv4地址,该地址可能会不时更改(从而使您的用户可能通过{{1}使用重定向的书签无效}指令,以及使Google / Yandex等生成的搜索索引无效。
正如其他人所建议的那样,您可以使用其中一个动态DNS提供程序来确保始终具有解析为您的IPv4地址的域名,然后在nginx配置中使用此类域名。只是一些最受欢迎的选项:
但是,请注意,nginx只会在启动时尝试解析域名,因此,您必须不断重新启动它才能获取任何可能的更改。
此外,如果您的IPv4地址确实每30分钟更改一次,而不是每隔几年左右更改一次,那么无论您是否通过动态DNS进行更新(无论是否通过动态DNS),这种方法不仅可能导致可能是停机时间(您可以在nginx中使用proxy_cache
进行操作),但也可以允许您家庭ISP的其他订阅者在您的IPv4地址更改和更新时间之间模拟您的网站应用于VPS,或者,如果您的线路或电源出现故障。
因此,我不建议使用动态DNS路由。
您可能会在获取免费IPv6隧道和静态IPv6分配方面取得一些成功,而不是尝试跟踪动态IPv4地址。在这种情况下,您可以决定将IPv6地址直接发布到全世界,并仅使用VPS代理IPv4客户端。
而不是将您的VPS连接到您的家用机器,而是将您的家用机器电话改回VPS,这将是一种更好,更可靠和更强大的方法。您可以使用VPN或IPsec解决方案,甚至是普通的OpenSSH来完成此类通话。
在这种情况下,您只需要(0)在您的主页上硬编码的VPS的地址,以及(1)您的家庭计算机的私有IP地址和端口号在您的nginx内硬编码VPS。这将确保不仅无法窃取您的连接(因为它将被完全加密和验证),而且任何配置文件中都没有任何地方您的动态IPv4地址将被硬编码。
如果使用ssh,您可以使用较新版本的隧道接口,也可以使用普通旧端口转发。
在VPS上:
rewrite
在家用计算机上,只要您在端口8080上运行webapp:
server {
listen *:80;
listen [::]:80;
server_name vps;
location / {
proxy_pass http://127.0.0.1:2280;
}
}
答案 3 :(得分:1)
有很多方法可以解决这个问题。对我来说,这是最简单的一个,无需安装额外的软件或订阅动态DNS网站。
我不知道这是一个时间问题,但ipinfo.io对我不起作用,所以我在解决方案中使用了另一项服务。如果需要,可以更改它。
首先,在您的本地PC中,将您在远程 / etc / nginx / sites-available / default (您称之为 publlic_ip 的那个)中的IP写入的/ tmp / oldIP 。只是IP,如:
20.20.20.20
这只需要完成一次。 然后,将以下脚本保存在任何位置,提供执行权限并将其添加到cron:
#!/bin/bash
VPS_IP= #fill this
VPS_USER= #fill this
MyOldIP=$(cat /tmp/oldIP)
MyIP=$(curl http://bot.whatismyipaddress.com)
if [ $MyOldIP != $MyIP ] ; then
ssh $VPS_USER@$VPS_IP "sudo sed -i 's/$MyOldIP/$MyIP/' /etc/nginx/sites-available/default" \
&& ssh $VPS_USER@$VPS_IP sudo service nginx restart
fi