我之前发布了这个问题,但我想我写它的方式并不清楚。所以我删除了它,这里又是我能想到的尽可能多的信息。
我使用戴尔尺寸 2400 的旧计算机部件创建了一个服务器。我安装了带有 Linux 4.15.0-72-generic 内核的 Ubuntu 16.04.6 LTS。我安装了 mysql-server、apache2、certbot、pyton3、python-apache-certbot、php7.0、ssh、vsftpd,然后将我安装的所需端口转发到内部 ip。(192.168.1.23)。
然后我在服务器上设置了一个 wordpress 站点。问题是我设置了虚拟主机文件(如下所示),但是为了使站点正常工作,我必须使用网络内部 ip 来加载站点。
这是虚拟主机文件:
<IfModule mod_ssl.c>
<VirtualHost 192.168.1.23:443>
# 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 webmaster@localhost
DocumentRoot /var/www/domain.com/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
ServerName domain.com
SSLCertificateFile /etc/letsencrypt/live/domain.com/fullchain.pem
SSLCertificateKeyFile /etc/letsencrypt/live/domain.com/privkey.pem
Include /etc/letsencrypt/options-ssl-apache.conf
</VirtualHost>
</IfModule>
~
请记住,这是工作的虚拟主机。
当我将其更改为域名 (domain.com:443) 时,它应该是不起作用的。
(端口 80 上的相同问题。)
我需要一个内部 dns 还是别的什么?
我尝试安装 bind 但要么我把它搞砸了,要么不是这样......或者两者兼而有之......老实说更倾向于两者。
无论如何,我希望这是足够的信息,并且有人能够对此有所了解。我希望能够在此服务器上托管另一个站点。
该
ServerName
指令用于定义虚拟主机将接受的默认域名(以及ServerAlias
默认域名的同义词)。此外,您不需要在<VirtualHost>
标签中指定网络接口 IP 添加器(或域名),而您没有任何特殊目标 - 即为不同服务器的 IP 地址访问的同一域名提供不同的内容等。除非没有指向您服务器的公共 IP 地址的 FQDN,否则您需要设置本地 DNS 或您需要编辑
hosts
LAN 设备的文件,以便通过 LAN 内的域名访问您的(Web)服务器。有关详细信息,请阅读以下参考资料:Apache2 Docs:基于名称的虚拟主机支持
创建额外的虚拟主机 Ubuntu 服务器
如何将域设置为ip地址?
使用 Ubuntu 16.04 在 VirtualBox 上设置虚拟主机
apache虚拟主机不工作
该
ServerName
指令仅由 Apache 用于了解它作为哪个域运行(在某些情况下,它用于根据域区分多个 VirtualHost)。它对尝试解析域的客户端没有影响。您需要进行哪些更改完全取决于您的设置。
如果您想使用域,您仍然需要告诉客户端计算机它指向哪台 PC。这可以通过系统的
hosts
-file(更容易设置,特别是对于测试,但是为每台计算机设置很麻烦)或通过您自己的 DNS 服务器(设置和正确设置有点困难,但更多最后灵活)。(如果您使用的是“官方”域,而不是您自己发明的域,则这不适用。除非您想在本地网络中将 domain.com 解析为您的内部 IP。)要检查域本身是否设置正确,请通过ifconfig.co
ifconfig -a
之类的页面在服务器上检查您的公共 IP(或本地 IP,具体取决于您的设置) ,并将其与或返回的 IP 进行比较。如果它们返回相同,则您的域已正确设置为指向您的公共 IP。如果他们不这样做,您将不得不更改您的域指向的位置,但我对此无能为力。dig domain.com
nslookup domain.com
如果您想从公共互联网访问该页面,您将不得不担心 NAT。NAT(或“网络地址转换”)通过单个公共 IP 处理多个内部设备的通信(在您的情况下可能设置了类似的东西)。您的路由器目前不知道应该将端口 80/443 上的传入数据包发送到哪台计算机,这可能是您的问题的一个可能原因。要正确设置,请搜索如何在您的特定路由器上设置“端口转发”,并将其设置为将端口 80 和 443 上的所有传入 TCP 数据包发送到本地网络中服务器上的同一端口。
您可能还需要注意 VirtualHost 指令,您专门在其中放置了本地 IP(尽管我无法想象这在您当前的设置中是一个问题,但更有可能是其他原因)。这基本上告诉 Apache 只监听该特定 IP 上的传入连接。设置 NAT 后,这应该没问题,因为请求会发送到本地网络的接口。如果您在完成其他步骤后仍然遇到问题,您可能需要尝试用星号替换该 IP 地址,从而使 Apache 侦听所有接口。这将消除可能的错误的另一个(如果非常小)原因。
所以经过大量的时间和研究,我想通了。有很多问题,但主要的解决方案是,例如,这将
<virtualhost 192.168.1.23 askubuntu.com:80>
是现在与多个虚拟主机一起工作。我确实在通过端口 443 和其他问题提供 http 服务时遇到了一些问题。在我弄清楚这一点后,我重新格式化了整个磁盘并重新安装了所有东西。
现在像魅力一样奔跑!
感谢所有的帮助!