nginx没有收听端口80

时间:2013-04-15 17:45:10

标签: linux ubuntu nginx ubuntu-12.04

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

问题:但是,访问该网址不会加载该网站。 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;
    }

}

10 个答案:

答案 0 :(得分:123)

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

答案 1 :(得分:26)

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

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

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

答案 2 :(得分:5)

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

确保sites-available文件实际上已启用default_server

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

答案 3 :(得分:4)

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

答案 4 :(得分:3)

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

答案 5 :(得分:2)

;/etc/nginx/nginx.conf缺少分号include /etc/nginx/servers-enabled/*;,例如nginx -t之前的行,可以绕过此修改,/etc/nginx/nginx.conf检查将会成功。

因此,请检查;中的所有说明是否以分号 public static async Task<string> messaging_server() { using (var messagebus1 = new TinyMessageBus("ExampleChannel")) { messagebus1.MessageReceived += (sender, e) => { var encodedMessage = Encoding.UTF8.GetString(e.Message); Debug.WriteLine(encodedMessage); return encodedMessage; } while (true) { #infinite loop } } } 结束。

答案 6 :(得分:1)

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

#whereis nginx

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

DAEMON=/usr/sbin/nginx

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

答案 7 :(得分:0)

在我的情况下,这些网络命令的输出显示nginx已正确绑定到端口80,但是这些端口不能被nmap外部访问或看到。

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

答案 8 :(得分:0)

虽然我们都认为我们不会犯傻错误,但我们会这么做。

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

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

对于我自己来说,这是我的路由器,我经营一个家庭实验室,因此我可以使用NGINX进行反向代理,从而远距离访​​问路由器背后的服务,因为我的路由器仅处理基于IP的传入数据,而不处理任何主机名,我确定这都是正常现象。

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

是的,就像将端口再次转发到NGINX一样简单,并且所有问题都已解决。

我现在将以极度羞愧的头垂着头走开,尽管我留下了这个答案,以表达我对这个导致我发现自己的错误的人们的感谢。

所以谢谢你。

答案 9 :(得分:0)

我在服务器上也遇到了同样的问题,在这里列出了解决方法:

步骤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,它对我有用,希望对您也有用。