NGINX默认站点可以工作,但是另一个端口上的站点不能工作

时间:2018-10-21 21:34:58

标签: php nginx ubuntu-18.04

您好,我正在使用nginx设置两个服务器。一个是一个IP地址上的前端端口80,一个是后端8080。

默认设置有效,后端通过端口8080为我提供了连接超时/尝试访问服务器时无响应。

我认为这是我的执行,但是,要测试后端,我有一个简单的index.php,如果我在浏览器中转到xxx.xxx.xxx.xxx:8080,我会超时,但我会超时/ 没有反应。

Nginx说它是开放的并且正在监听。没有端口号,它将转到该IP地址的我的前端/默认服务器。

错误日志什么也不显示!甚至我服务器上具有访问权限和上游权限的日志也什么也没显示。

ubuntu 18.04

这是我的配置 服务器1端口80默认

   server {
  # Replace this port with the right one for your requirements
  listen 80 default_server;

  # Multiple hostnames separated by spaces.  Replace these as well.
  server_name www.domain.com domain.com *.domain.com;

  root /var/www/my_project/html;

  error_page 404 errors/404.php;
#  access_log logs/my_project.ventures.access.log;
  access_log  /var/log/nginx/server.intra-upstream.log upstream buffer=16k;
  access_log  /var/log/nginx/server.intra-access.log combined buffer=16k;

  index index.php index.html index.htm;

  # static file 404's aren't logged and expires header is set to maximum age
  location ~* \.(jpg|jpeg|gif|css|png|js|ico|html)$ {
    access_log off;
    expires max;
  }

  location ~ \.php$ {
    include fastcgi.conf;
    fastcgi_intercept_errors on;
    # By all means use a different server for the fcgi processes if you need to
    fastcgi_pass   127.0.0.1:9000;
  }

  location ~ /\.ht {
    deny  all;
  }
}

这是无法通过client.domain2.com或www.domain2.com访问的第二台服务器-URL正确,但显示服务器1 htdocs。 client.domain2.com:8080或任何其他组合带来Cannot reach siteConnection Timed out

    server {
  # Replace this port with the right one for your requirements
  listen 8080;

  # Multiple hostnames separated by spaces.  Replace these as well.
  server_name client.domain2.com www.domain2.com;

  root /var/www/my_project/backend;

  error_page 404 errors/404.php;
#  access_log logs/my_project.fun.access.log;
  access_log  /var/log/nginx/server.intra-upstream.log upstream buffer=16k;
  access_log  /var/log/nginx/server.intra-access.log combined buffer=16k;
  index index.php index.html index.htm;

  # static file 404's aren't logged and expires header is set to maximum age
  location ~* \.(jpg|jpeg|gif|css|png|js|ico|html)$ {
    access_log off;
    expires max;
  }

  location ~ \.php$ {
    include fastcgi.conf;
    fastcgi_intercept_errors on;
    # By all means use a different server for the fcgi processes if you need to
    fastcgi_pass   127.0.0.1:9000;
  }

  location ~ /\.ht {
    deny  all;
  }
}

5 个答案:

答案 0 :(得分:1)

您必须在防火墙中允许8080端口

如果您尚未安装ufw,请按以下步骤安装

$ sudo apt install ufw

然后检查ufw状态

$ sudo ufw status

检查所需端口是否已添加到列表中。

然后使用

 $ sudo ufw allow 8080 

然后再次检查ufw状态。现在,它向您显示允许的ipv4,ipv6端口和连接。重新启动您的nginx服务器并检查端口是否正常

$ sudo systemctl nginx restart
$ curl -I 'http://{youraddress}:8080'

或者在浏览器中点击网址。

如果您使用的是GCP,则AWS会在服务器控制台中检查外部防火墙设置。例如http_server allow80。然后将此记录编辑为80、8080并保存。

警告:请勿在AWS的GCP中使用ufw进行内部防火墙设置,因为它们已经为引擎提供了自己的防火墙设置。

谢谢

答案 1 :(得分:0)

您的配置正确。我可能会在每个服务器上添加“ server_name”。

您应该将日志记录添加到每个虚拟主机,并将其添加到每个server {}条目:

access_log  /var/log/nginx/server.intra-upstream.log upstream buffer=16k;
access_log  /var/log/nginx/server.intra-access.log combined buffer=16k;

您还需要添加到http {}条目中,以使上游日志有效:

log_format upstream '$remote_addr - $remote_user [$time_local]  $request '
                    '$upstream_addr $upstream_cache_status $upstream_status $upstream_response_time';

您可以在这些文件中查看请求日志。在上游使用PHP-FPM记录事务并访问HTTP请求。

您可能有iptables个阻止或其他网络限制。

要检查服务器是否正在侦听端口8080,请将此命令用作root

bash# netstat -nap | grep -i nginx

这将显示以下内容:

tcp        0      0 0.0.0.0:443             0.0.0.0:*               LISTEN      939/nginx: master p
tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN      939/nginx: master p
tcp        0      0 0.0.0.0:81              0.0.0.0:*               LISTEN      939/nginx: master p
tcp        0      0 0.0.0.0:82              0.0.0.0:*               LISTEN      939/nginx: master p
unix  3      [ ]         STREAM     CONNECTED     17513    939/nginx: master p
unix  3      [ ]         STREAM     CONNECTED     17512    939/nginx: master p
unix  3      [ ]         STREAM     CONNECTED     17518    939/nginx: master p
unix  3      [ ]         STREAM     CONNECTED     17519    939/nginx: master p

就我而言,NGiNX正在侦听端口80、81、82和443。

要检查您的iptables规则,请输入:

bash# iptables-save

我不会在此处放置输出,因为它可能会有很大差异,您只需要检查默认的INPUT规则(位于输出顶部),就像这样:

*filter
:INPUT DROP [67342:4090666]

就我而言,INPUT是默认的DROP。如果在那里看到ACCEPT,就可以了,否则,您需要检查端口8080上是否有任何明确的规则接受数据包。

如果您将INPUT设为DROP,则可以使用以下命令测试端口8080是否是您遇到的问题:

bash# iptables -A INPUT -p tcp -m tcp --dport 8080 -j ACCEPT

答案 2 :(得分:0)

我已经测试了您的配置,对我来说似乎是正确的。我想到的一些事情可能会导致您遇到意外的行为:

  • 正如其他人所说,您是否在创建了最后一个conf文件后重新启动nginx?我知道这听起来很傻,但是我却忘记了自己很多时间。
  • root域指令的权限问题或路径错误。您确定www.domain2.com文件目录是否存在和/或www-data /您的nginx用户可读吗?
  • 检查您的DNS。您是否记得将www.domain2.com和其他域添加到主机文件中(当然,假设您在自己的盒子上工作)?通过ping或telnet可以访问您的域吗?
  • 尝试验证您的sintax sudo nginx -t。它说有趣吗?

答案 3 :(得分:0)

如您所说:

  

访问权限和上游什么都不显示

所以,真相却在其他地方:查看您的防火墙。如果您使用的是AWS,请查看您的VPC配置(子网,nacl,安全组)。

在nginx方面,这似乎还不错,至少在指向index.php时必须具有日志访问权限。如果要查看静态文件的日志,应在行

上添加注释
access_log off;

(仅用于测试,将其从生产中退还)。

答案 4 :(得分:-2)

我遇到了同样的问题,如上面评论中所述,原因是防火墙阻止了端口