70

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

问题:但是转到 URL 不会加载站点。netstat -nlp | grep nginx并且netstat -nlp | grep 80两者都没有返回结果!lsof -i :80也不返回任何内容。来自另一台服务器的Adig返回正确的 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;
    }

}
4

11 回答 11

136

我遇到了同样的问题,解决方案是我没有正确符号链接我的 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
于 2013-09-29T23:21:11.577 回答
33

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

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

http {
  ...
  include /etc/nginx/sites-enabled/*;
}
于 2013-09-25T01:40:00.183 回答
10

我发现通过以下步骤调试 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!';
}
于 2018-11-04T04:11:10.350 回答
7

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

确保实际启用了sites-available带有 的文件。default_server

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

于 2015-02-03T14:59:03.677 回答
5

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

于 2013-08-16T17:10:58.637 回答
3

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

因此,只需检查所有指令/etc/nginx/nginx.conf是否都以分号结尾;

于 2016-12-27T20:52:49.063 回答
1

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

#whereis nginx

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

DAEMON=/usr/sbin/nginx

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

于 2013-08-22T14:58:07.617 回答
1

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

第 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(正常、未加密的 Web 流量)和端口 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 ,它对我有用,希望对你也有用。

于 2020-01-27T13:49:25.723 回答
0

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

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

于 2019-04-05T08:01:34.657 回答
0

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

sudo nginx -t

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

sudo nginx -s reload
于 2021-09-11T07:01:12.630 回答
0

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

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

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

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

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

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

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

所以谢谢。

于 2019-10-09T21:41:41.713 回答