为 apache2 打开端口的问题

Problems with getting port open for apache2

在我的服务器上,我同时安装了 tomcat7 和 apache2。我停止了 tomcat7 服务并想在端口 80(也尝试使用 8082 进行测试)和端口 443(也使用 442 进行测试)上使用 apache2 进行监听。在我停止 tomcat7 之前,我用 8082 试了一下,我可以建立网络呼叫并获得网络。但是在我停止 tomcat7 并想用 apache2 监听端口 80 和 443 之后,我无法建立网络调用(如果我再次尝试使用 8082 和 442 也不会)。

netstat –tulpe 返回以下内容:

tobias@<hostname>:/etc/apache2$ netstat -tulpe
(No info could be read for "-p": geteuid()=1000 but you should be root.)
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       User       Inode       PID/Program name
tcp        0      0 <hostname>.stratoser:8082 *:*                     LISTEN      root       <number>  -               
tcp        0      0 *:ssh                   *:*                     LISTEN      root       <number> -               
tcp        0      0 localhost:smtp          *:*                     LISTEN      root       <number> -               
tcp6       0      0 [::]:ssh                [::]:*                  LISTEN      root       <number> -               
tcp6       0      0 localhost:smtp          [::]:*                  LISTEN      root       <number> -               
tcp6       0      0 [::]:https              [::]:*                  LISTEN      tomcat7    <number> -               
tcp6       0      0 localhost:8005          [::]:*                  LISTEN      tomcat7    <number> -               
tcp6       0      0 [::]:http               [::]:*                  LISTEN      tomcat7    <number> - 

我的ports.conf:

tobias@<hostname>:/etc/apache2$ cat ports.conf 
# If you just change the port or add more ports here, you will likely also
# have to change the VirtualHost statement in
# /etc/apache2/sites-enabled/000-default.conf

Listen 8082

<IfModule ssl_module>
    Listen 442
</IfModule>

<IfModule mod_gnutls.c>
    Listen 442
</IfModule>

# vim: syntax=apache ts=4 sw=4 sts=4 sr noet

和 000-default.conf

tobias@<hostname>:/etc/apache2$ cat sites-available/000-default.conf 
<VirtualHost _default_:8082>
    # 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/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
</VirtualHost>

# vim: syntax=apache ts=4 sw=4 sts=4 sr noet

服务-status-all返回:

[ + ]  apache2
[ - ]  tomcat7

错误日志显示:

[Sun Jun 19 08:08:09.325184 2016] [core:notice] [pid 18254:tid 139964856280960] AH00094: Command line: '/usr/sbin/apache2'
[Sun Jun 19 08:08:21.312066 2016] [mpm_event:notice] [pid 18254:tid 139964856280960] AH00491: caught SIGTERM, shutting down
[Sun Jun 19 08:09:47.916405 2016] [mpm_event:notice] [pid 18466:tid 140331437791104] AH00489: Apache/2.4.7 (Ubuntu) configured -- resuming normal operations
[Sun Jun 19 08:09:47.916530 2016] [core:notice] [pid 18466:tid 140331437791104] AH00094: Command line: '/usr/sbin/apache2'

(这几行好像只是警告?)

我在服务器的终端上尝试了 wget 并得到了正确的答案:

tobias@<hostname>:~$ wget http://<server-ip>:8082
--2016-06-19 08:21:38--  http://<server-ip>:8082/
Connecting to <server-ip>:8082... connected.
HTTP request sent, awaiting response... 200 OK
Length: 11510 (11K) [text/html]
Saving to: ‘index.html’

100%[====================================================================================>] 11.510      --.-K/s   in 0s      

2016-06-19 08:21:38 (370 MB/s) - ‘index.html’ saved [11510/11510]

和服务器名称相同的答案。但不是在另一台机器上的网络浏览器上。为什么不?

顺便说一句:lsof -i 返回注意。为什么不呢?

服务器版本:Ubuntu、14.04.4 LTS

您提供了所有正确的故障排除工具,谢谢!一个建议:从 netstat 中省略 e 参数 - 对于这种类型的故障排除,您需要数字端口号,而不是转换为人类可读形式。如果您不是 root 用户,p 参数也不会执行任何操作,但也无妨。

解决你的问题的关键是netstat输出。您的 netstat 输出显示 Apache 正在侦听端口 8082,而不是端口 442。在您的配置中,您也没有提供任何 SSL 配置(000-default.conf 没有提到任何 SSL 配置选项),所以大多数可能它根本没有配置。这样就解释了端口 442 问题。

netstat 输出显示的第二件事是 Apache 正在侦听端口 8082,但只侦听一个特定的 IP 地址。由于您的 wget 成功了,这可能是正确的,这只是一个不常见的问题(如果您的网络配置发生变化,可能会在未来导致问题)。

您提到的最后一个问题是您无法从任何其他系统访问服务器。关于这一点,none 的配置文件给出了线索​​,但通常,此类问题是您没有在防火墙中打开端口 8082。

还有一点:我最初使用 telnet,而不是使用 wget 进行测试。由于 telnet 级别较低,因此可能会干扰您的测试的活动部件较少。不过,这只是一般提示 - 在这种情况下,wget 确实为您提供了所需的信息。