繁体   English   中英

nginx 不侦听端口 80

[英]nginx not listening to port 80

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

问题:但是转到 URL 不会加载站点。 netstat -nlp | grep nginx netstat -nlp | grep nginxnetstat -nlp | grep 80 netstat -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;
    }

}

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

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

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

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

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

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

确保实际启用了具有default_serversites-available文件。

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

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

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

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

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

#whereis nginx

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

DAEMON=/usr/sbin/nginx

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

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

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

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

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

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

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

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

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

我现在将带着极度羞耻的头走开,尽管我留下这个答案是为了表达我对这个帖子中的人的感激之情,这些人让我发现了自己的错误。

所以谢谢。

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM