nginx没有收听端口80

问题描述 投票:62回答:8

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

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

我该如何解决这个问题?

/etc/Nginx/site-available/my site.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;
    }

}
linux ubuntu nginx ubuntu-12.04
8个回答
125
投票

我有同样的问题,解决方案是我没有正确地符合我的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

26
投票

如果您的日志对此问题保持沉默,则可能不包括启用站点的目录。告诉站点正在加载的一种简单方法是将服务器块中的错误/访问日志路径设置为唯一路径,重新加载nginx,并检查文件是否已创建。

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

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

5
投票

我遇到了同样的问题,我在通过HTTP连接时遇到了Failed to load resource: net::ERR_CONNECTION_REFUSED错误,但在HTTPS上很好。 Ran netstat -tulpn并看到nginx没有绑定到端口80的IPv4。做完这里描述的一切。原来是非常愚蠢的事情:

确保实际启用了带sites-availabledefault_server文件。

希望这能节省一些其他可怜的白痴。


4
投票

您可能需要将nginx绑定到端口80两次。那是你的完整配置文件吗?你有没有另一个声明听80端口?


4
投票

我发现通过以下步骤来调试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!';
}

2
投票

;失踪的半结肠/etc/nginx/nginx.confinclude /etc/nginx/servers-enabled/*;之前的线上可以绕过这个意图和nginx -t检查将是成功的无论如何。

因此,请检查/etc/nginx/nginx.conf中的所有指令是否以分号;结束。


1
投票

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

#whereis nginx

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

DAEMON=/usr/sbin/nginx

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


0
投票

在我的情况下,那些网络命令的输出显示nginx正确绑定到端口80,但端口不能从外部访问或使用nmap可见。

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

© www.soinside.com 2019 - 2024. All rights reserved.