[英]nginx not listening to port 80
我刚刚安装了 Ubuntu 12.04 服务器和 nginx 1.2.7,从启用了站点的default
删除,并将我自己的文件添加到sites-available
和sites-enabled
符号链接中。 然后重启nginx。
问题:但是转到 URL 不会加载站点。 netstat -nlp | grep nginx
netstat -nlp | grep nginx
和netstat -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_server
的sites-available
文件。
希望这能拯救其他一些可怜的白痴。
您可能将 nginx 绑定到端口 80 两次。 那是你的完整配置文件吗? 不是有另外一条语句监听80端口吗?
一个分号;
在/etc/nginx/nginx.conf
缺少/etc/nginx/nginx.conf
在include /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.