我用 Dart 开发了一个国际象棋网页游戏,尝试部署到网络主机时失败了。当我使用公网 IP 访问这个网页应用时,它运行顺利。但是,当使用域名访问时,它总是返回到默认页面。这是我的 Apache 设置:
<IfModule mod_ssl.c>
<VirtualHost _default_:443>
ServerAdmin webmaster@localhost
DocumentRoot /home/user/my_web_app
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
SSLEngine on
SSLCertificateFile /etc/ssl/certs/ssl-cert-snakeoil.pem
SSLCertificateKeyFile /etc/ssl/private/ssl-cert-snakeoil.key
SSLVerifyClient none
#SSLOptions +FakeBasicAuth +ExportCertData +StrictRequire
<FilesMatch "\.(cgi|shtml|phtml|php)$">
SSLOptions +StdEnvVars
</FilesMatch>
ProxyPreserveHost On
ProxyPass / http://127.0.0.1:8080/
ProxyPassReverse / http://127.0.0.1:8080/
</VirtualHost>
</IfModule>
我尝试了 Apache 和 Nginx;发生了相同的情况。但是,我不知道问题出在哪里?有什么建议吗?
[2017-06-08更新] 我修改了Apache中的设置,最终发现这是由于Cloud Flare引起的像这样。我更换了 DNS 提供商。大多数问题都解决了。
答案1
有一篇很好的文章虚拟主机故障排除。以下是一份可能对您的情况有帮助的简短清单:
- 仔细检查这是否是您唯一的
<VirtualHost *:443>
。命令apache2ctl -S
可能会有所帮助,因为它会检查您的配置、检查语法并提供所有虚拟主机的列表。 - 你正在
ProxyPass
整理一切:删除不必要的DocumentRoot
指示。 - 查看
ServerName
。任何包含魔法_default_
通配符的虚拟主机都ServerName
与 main_server 相同,但如果 main_server 没有,Apache 会尝试根据服务器的主机名并使用 DNS 推断它。这可能会产生意外结果(请参阅虚拟主机匹配的深入讨论)。
答案2
您没有提到您使用的是哪种操作系统。我假设您使用的是 Ubuntu。那么您必须遵循某些步骤才能使您的 webapp 与域名一起工作。
1. Create a vhost.conf file in /etc/apache2/sites-available/000-vhosfilename.conf
我可以看到你已经粘贴了 vost 配置文件,但是你缺少一个重要的指令,即服务器名称
我再次分享您上面粘贴的 vhost 文件的配置,并向其中添加 ServerName 指令。只需将您的域名替换为 example.com
<IfModule mod_ssl.c> <VirtualHost _default_:443> ServerAdmin webmaster@localhost ServerName example.com DocumentRoot /home/user/my_web_app ErrorLog ${APACHE_LOG_DIR}/error.log CustomLog ${APACHE_LOG_DIR}/access.log combined SSLEngine on SSLCertificateFile /etc/ssl/certs/ssl-cert-snakeoil.pem SSLCertificateKeyFile /etc/ssl/private/ssl-cert-snakeoil.key SSLVerifyClient none #SSLOptions +FakeBasicAuth +ExportCertData +StrictRequire <FilesMatch "\.(cgi|shtml|phtml|php)$"> SSLOptions +StdEnvVars </FilesMatch> ProxyPreserveHost On ProxyPass / http://127.0.0.1:8080/ ProxyPassReverse / http://127.0.0.1:8080/ </VirtualHost> </IfModule>
此后只需保存 vhost 文件并启用 vhost 配置文件。
a2ensite 000-vhosfilename.conf
现在重新启动 apache 并再次使用域名浏览您的 webapp。希望它现在应该可以正常工作。