【问题标题】:nginx not listening to port 80nginx 不监听 80 端口
【发布时间】:2013-04-07 22:32:41
【问题描述】:

我刚刚安装了 Ubuntu 12.04 服务器和 nginx 1.2.7,从启用站点中删除了 default,并将我自己的文件添加到 sites-available 和符号链接 sites-enabled。然后重启nginx。

问题:但是转到 URL 不会加载站点。 netstat -nlp | grep nginxnetstat -nlp | grep 80 都没有返回结果! lsof -i :80 也不返回任何内容。来自另一台服务器的 dig 返回正确的 IP 地址,因此它不应该是 DNS 问题。我能够连接到我现在已经停止服务的 apache。 nginx 日志也没有显示任何内容。

我应该如何解决这个问题?

/etc/nginx/site-available/mysite.com

server {
    listen   80;
    server_name www.mysite.com mysite.com *.mysite.com;
    access_log /var/log/nginx/access.log;
    error_log /var/log/nginx/error.log;
    root /var/www/mysite/public;

    index index.php index.html;

    location / {
        try_files $uri $uri/ /index.php?$args ;
    }
    location ~ \.php$ {
        fastcgi_pass unix:/var/run/php5-fpm.sock;
        fastcgi_index index.php;
        include fastcgi_params;
        fastcgi_read_timeout 300;
    }

}

【问题讨论】:

  • 日志中有什么内容?
  • 它真的在运行吗?你是从sudo开始的吗?
  • 请不要仅仅因为您不知道答案就对问题投反对票。我有同样的问题。访问日志中没有任何内容...它正在监听 *:80。调试错误日志中没有错误。是的,@DondiMichaelStroma 它正在运行。 (笑)。
  • 您找出问题所在了吗?我有类似的问题...
  • 我使用的是 centos-6。它没有启用站点等。我必须删除服务器条目 /etc/nginx/conf.d/default.conf 并在同一目录中添加 nginx.conf。

标签: linux ubuntu nginx ubuntu-12.04


【解决方案1】:

我也面临同样的问题。只需重新加载 nginx 帮助我

sudo nginx -t

如果出现错误,请删除 log.txt 文件 那么,

sudo nginx -s reload

【讨论】:

    【解决方案2】:

    我在服务器上遇到了同样的问题,这里我列出了我是如何解决的:

    第 1 步 :: 安装 Ngnix

    sudo apt update
    sudo apt install nginx
    

    第 2 步 - 调整防火墙

    sudo ufw app list
    

    您应该获得应用程序配置文件的列表:

    Output Available applications: Nginx Full Nginx HTTP Nginx HTTPS OpenSSH

    如您所见,Nginx 提供了三个配置文件:

    Nginx Full:此配置文件同时打开端口 80(正常、未加密的网络流量)和端口 443(TLS/SSL 加密流量)

    Nginx HTTP:此配置文件仅打开端口 80(正常、未加密的网络流量)

    Nginx HTTPS:此配置文件仅打开端口 443(TLS/SSL 加密流量)

    由于我尚未在本指南中为我们的服务器配置 SSL,我们只需要允许端口 80 上的流量。您可以通过键入以下内容启用此功能:

    sudo ufw allow 'Nginx HTTP'
    

    您可以通过键入以下内容来验证更改:

    sudo ufw status
    

    第 3 步 - 检查您的 Web 服务器

    systemctl status nginx
    

    现在检查端口 80 ,它对我有用,希望对你也有用。

    【讨论】:

      【解决方案3】:

      虽然我们都认为自己不会犯愚蠢的错误,但我们确实会犯。

      因此,如果您正在研究 NGINX 问题并且所有迹象都表明它应该可以工作,那么您应该远离文件并查看下游。

      系统防火墙、硬件防火墙、Nat 路由器/防火墙。

      对我自己来说,这个问题是我的路由器,我经营着一个家庭实验室,所以我可以从远处访问路由器后面的服务我使用 NGINX 来反向代理,因为我的路由器只处理基于 IP 的传入,而不做任何处理主机名,我相信这一切都很正常。

      无论如何,当我几天前保护我的网络时,我的问题突然出现了,删除了一些不再需要的端口转发,并且我不小心删除了端口 80。

      是的,就像将该端口再次转发到 NGINX 一样简单,一切都已修复。

      我现在会带着极度羞愧的头离开,尽管我留下这个答案是为了感谢这个帖子中那些让我发现自己的错误的人。

      谢谢你。

      【讨论】:

        【解决方案4】:

        在我的例子中,这些网络命令的输出显示 nginx 正确绑定到端口 80,但这些端口无法从外部访问或使用 nmap 可见。

        虽然我怀疑有防火墙,但事实证明机器上的旧 iptables 规则正在重定向来自这些端口的流量并与 nginx 冲突。使用sudo iptables-save 查看所有当前适用的规则。

        【讨论】:

          【解决方案5】:

          我发现通过以下步骤调试 nginx 很有帮助:

          1...确保 nginx 正在运行。

          ps aux | grep nginx
          

          2...检查已绑定到相关端口的进程。

          lsof -n -i:80
          

          3...确保 nginx 已重新加载。

          sudo nginx -t
          sudo nginx -s reload
          

          在 Mac 上,brew services restart nginx 不足以重新加载 nginx。

          4...尝试手动创建简单的响应,以确保您的位置路径没有混乱。这在使用 proxy_pass 将请求转发到其他正在运行的应用程序时出现问题时特别有用。

          location / {
              add_header Content-Type text/html;
              return 200 'Here I am!';
          }
          

          【讨论】:

            【解决方案6】:

            /etc/nginx/nginx.conf 中缺少的分号; 例如在include /etc/nginx/servers-enabled/*; 之前的行可以绕过这个指令,nginx -t 无论如何检查都会成功。

            所以只需检查/etc/nginx/nginx.conf 中的所有指令是否都以分号; 结尾。

            【讨论】:

              【解决方案7】:

              我遇到了同样的问题,通过 HTTP 连接时出现Failed to load resource: net::ERR_CONNECTION_REFUSED 错误,但通过 HTTPS 很好。跑netstat -tulpn 并看到 nginx 没有绑定到 IPv4 的端口 80。完成这里描述的一切。结果证明是非常愚蠢的:

              确保带有default_serversites-available 文件实际已启用。

              希望这能拯救一些其他可怜的白痴。

              【讨论】:

                【解决方案8】:

                我遇到了同样的问题,解决方案是我没有正确符号链接我的 siteconf 文件。尝试运行vim /etc/nginx/sites-enabled/mysite.com——你能做到吗?我收到“权限被拒绝”。

                如果不运行:

                rm /etc/nginx/sites-enabled/mysite.com
                ln -s /etc/nginx/sites-available/mysite.com /etc/nginx/sites-enabled/mysite.com
                

                【讨论】:

                • 这为我修好了!显然,当您没有在第二个参数中输入完整的文件名时,即ln -s /etc/nginx/sites-available/mysite.com /etc/nginx/sites-enabled/,它会创建一种假的符号链接,nginx 会阻塞它。奇怪,但真实。
                • 这也是我的解决方案。在搜索答案时偶然发现了这个线程。
                • 这对我来说也是一个解决方案。我已经在圈子里跑了几个小时,试图修复一个 nginx 安装。太棒了,绅士!
                • 谢谢大家!我意识到今天早些时候创建符号链接时我做了类似的事情。使用完整路径和宾果游戏重新创建它,nginx 为我的新站点加载了配置。
                • 谢谢谢谢。在过去的 2 个小时里,我一直在拔头发!!
                【解决方案9】:

                如果您的日志未提及该问题,则您可能未包含启用站点的目录。判断站点正在加载的一种简单方法是将服务器块中的错误/访问日志路径设置为唯一路径,重新加载 nginx,然后检查文件是否已创建。

                确保 /etc/nginx/nginx.conf 中的 http 上下文中存在以下包含指令。

                http {
                  ...
                  include /etc/nginx/sites-enabled/*;
                }
                

                【讨论】:

                • 这么简单的事情不容错过。感谢您提及!
                • 非常感谢!你拯救了我的一天
                • 在某些版本的nginx中你必须写include /etc/nginx/sites-enabled/*.*;
                【解决方案10】:

                您是否检查过您的 nginx 二进制文件是否真的存在?请检查是否

                #whereis nginx
                

                输出二进制路径并使用 /etc/init.d/nginx 中的初始化脚本检查此路径。例如

                DAEMON=/usr/sbin/nginx
                

                (在我的初始化脚本中,“test -x $DAEMON || exit 0”被调用,无论如何这个脚本什么也没返回——我的二进制文件完全丢失了)

                【讨论】:

                  【解决方案11】:

                  您可能将 nginx 绑定到端口 80 两次。那是你的完整配置文件吗?难道你没有另一个监听80端口的语句吗?

                  【讨论】:

                  • 我试图在端口 80 上托管 GitLab,但发现还有一个“默认”站点绑定到该端口。删除后者后,我的 GitLab 主机运行良好。
                  • @riezebosch 删除该站点的配置应该可以,但您也可以使用不同的 server_names 以防您想多次监听端口 80
                  • @Andres - 支持您的评论,谢谢,这很有帮助。
                  • nginx 在 /etc/nginx/sites-enabled 中有一个默认站点,我删除了它,现在它可以工作了!