我目前正在尝试通过 Wampserver 建立一个小型 php 网站,但在通过 Internet 访问时遇到一些技术困难,无法让它正常工作。使用我的外部 IP 通过指向 PHP 文件(看起来像 xxx.xxx.xxx.xxx/my_website.php)的 URL 访问该网页。主页显示一个表单,提示用户创建一个帐户,然后将该帐户信息存储在 MySQL 数据库中。
问题
通过外部连接访问时可以在线查看网站,但提交表单会产生 403 错误。
应该发生什么:
到目前为止,我已经尝试过:
无论如何,感谢您的阅读,我们将不胜感激。如果需要更多信息,请随时询问,我会尽我所能。
我认为没有必要从外部直接访问数据库。据我了解,整个过程是这样的:
STEP1:外部客户端访问边缘设备(路由器/防火墙)上的特定端口(通常是 tcp 80,因为它默认用于 http)。例如:从 1.1.1.1 到 2.2.2.2 tcp 端口 80
STEP2:路由器/防火墙检查其 DNAT 表(目标端口转发表)并将流量转发到目标内部 php 服务器。例如:从 2.2.2.2 到 192.168.100.1 tcp 端口 80
STEP3:收到请求后,php服务器处理工作并启动数据库连接。 e.g: from 2.2.2.2 to 192.168.100.2 tcp port 3306 注意:如果db server和php server在同一台主机上,可以用socket代替3306端口,简单来说就是在两者之间建立一个tcp连接php 服务器和数据库服务器,而不是在外部客户端和数据库服务器之间。
STEP4:数据库服务器完成创建账户的工作,并将反馈发送到 php 服务器。
STEP5:php服务器通过向路由器/防火墙发送信息来回复外部客户端,然后路由器/防火墙将流量转发回原来的外部客户端。
注意:有些东西前两步更容易往南走。
STEP1 边缘设备是否有一个STATIC公共IP地址?可以通过 DDNS 等其他方式来实现,但在您的情况下,静态公共 IP 地址是必不可少的。
STEP2:你不需要tcp 3306端口转发,但要确保边缘设备上的tcp 80端口转发正确配置,并且相应的流量被列入白名单。(同样适用于你的PHP服务器)注意:这个可能会让人感到意外,但在世界的某些地方,端口 80/443 受到审查,直到正式申请合法使用。
最后,在所有故障排除之后,您必须首先确保 tcp 网络按预期工作。某些测试很有用,例如使用 telnet 的 tcp 端口测试。例如,在您的客户端上打开一个终端窗口并输入以下命令:
telnet 2.2.2.2 80
您会发现工作连接和无法访问的连接之间有不同的返回消息。