Skip to content

NGINX

nginx

js
命令:
systemctl reload nginx

显示:
# 无输出 或 显示
● nginx.service - A high performance web server and a reverse proxy server
   Loaded: loaded (/usr/lib/systemd/system/nginx.service; enabled; vendor preset: disabled)
   Active: active (running) since ...
表示 Nginx 已成功重新加载配置。
-----------------------------------------------------------------------------------------------
2. 权限不足
如果显示:
Failed to reload nginx.service: Access denied
解决方案:
sudo systemctl reload nginx
-----------------------------------------------------------------------------------------------
3. 服务未运行
如果显示:
Failed to reload nginx.service: Unit nginx.service not found.
解决方案:
# 检查服务状态
systemctl status nginx
# 如果服务不存在,重新安装或启动
sudo systemctl start nginx
-----------------------------------------------------------------------------------------------
4. 配置语法错误
如果显示:
Job for nginx.service failed because the control process exited with error code.
解决方案:
# 检查nginx配置语法
sudo nginx -t
# 根据错误信息修复配置文件
sudo nginx -t -c /etc/nginx/nginx.conf
-----------------------------------------------------------------------------------------------
5. 常见排查步骤
# 检查nginx状态
systemctl status nginx
# 测试配置文件语法
sudo nginx -t
# 查看详细错误日志
sudo journalctl -u nginx -f
sudo tail -f /var/log/nginx/error.log
# 重新加载配置
sudo systemctl reload nginx
-----------------------------------------------------------------------------------------------
6. 如果reload失败,可以尝试完全重启
sudo systemctl restart nginx
-----------------------------------------------------------------------------------------------
7.显示
Job for nginx.service invalid.
这个错误提示 "Job for nginx.service invalid" 通常表示 systemd 服务文件有问题。以下是解决方案:

1. 检查服务文件状态
# 检查nginx服务文件是否存在
systemctl status nginx
# 查看服务文件路径
systemctl cat nginx

2. 重新加载 systemd 配置
重新加载 systemd 配置
# 重新加载systemd管理器配置
sudo systemctl daemon-reload
# 然后重新尝试nginx操作
sudo systemctl start nginx

3. 检查服务文件语法
# 检查服务文件语法
sudo systemd-analyze verify /lib/systemd/system/nginx.service
# 或者查看所有nginx相关服务文件
find /etc/systemd/system /lib/systemd/system -name "*nginx*" -type f

4. 重新安装 Nginx 服务文件
# 重新安装nginx(不会删除配置文件)
sudo apt-get install --reinstall nginx
# 或者对于CentOS/RHEL:
sudo yum reinstall nginx

5. 手动创建服务文件(如果需要)
如果服务文件缺失:
# 检查nginx安装位置
which nginx
nginx -V

# 创建基本的服务文件(如果缺失)
sudo tee /etc/systemd/system/nginx.service > /dev/null <<EOF
[Unit]
Description=The nginx HTTP and reverse proxy server
After=network.target remote-fs.target nss-lookup.target

[Service]
Type=forking
PIDFile=/run/nginx.pid
ExecStartPre=/usr/sbin/nginx -t
ExecStart=/usr/sbin/nginx
ExecReload=/usr/sbin/nginx -s reload
ExecStop=/bin/kill -s QUIT \$MAINPID
PrivateTmp=true

[Install]
WantedBy=multi-user.target
EOF

然后执行
sudo systemctl daemon-reload
sudo systemctl start nginx

6. 检查系统日志
# 查看详细的错误信息
sudo journalctl -xe
sudo journalctl -u nginx
-----------------------------------------------------------------------------------------------
js
端口 80443 已被其他进程占用,导致 Nginx 无法启动

1. 检查端口占用情况
# 检查80端口被谁占用
sudo netstat -tlnp | grep :80
sudo ss -tlnp | grep :80

# 检查443端口被谁占用
sudo netstat -tlnp | grep :443
sudo ss -tlnp | grep :443

# 或者使用lsof检查
sudo lsof -i :80
sudo lsof -i :443
-----------------------------------------------------------------------------------------------
2. 常见的端口占用原因及解决
情况一:Apache 正在运行
# 检查Apache是否运行
systemctl status apache2
# 或
systemctl status httpd
# 如果Apache在运行,停止它
sudo systemctl stop apache2
# 或
sudo systemctl stop httpd
# 禁用Apache开机自启(如果需要)
sudo systemctl disable apache2

情况二:其他 Nginx 进程
# 检查是否有其他nginx进程
ps aux | grep nginx
# 强制杀死所有nginx进程
sudo pkill -f nginx
# 或者逐个杀死
sudo killall nginx

情况三:其他Web服务器或应用
# 查看所有监听80和443端口的进程
sudo netstat -tlnp | grep -E ':(80|443)'
-----------------------------------------------------------------------------------------------
3. 解决端口冲突后的操作
# 确认端口已释放
sudo netstat -tlnp | grep -E ':(80|443)'
# 启动nginx
sudo systemctl start nginx
# 检查状态
systemctl status nginx
-----------------------------------------------------------------------------------------------
4. 如果必须同时运行多个Web服务器
方案A:修改Nginx端口
# 编辑nginx配置文件
sudo nano /etc/nginx/nginx.conf
# 或编辑站点配置
sudo nano /etc/nginx/sites-available/default

将端口改为其他未被占用的端口,如:
server {
    listen 8080;
    listen 8443 ssl;
    # ...
}

方案B:使用Nginx作为反向代理
如果Apache运行PHP应用,可以让Nginx在8080端口监听,然后反向代理到Apache。
-----------------------------------------------------------------------------------------------
5. 完整解决流程示例
# 1. 检查端口占用
sudo netstat -tlnp | grep -E ':(80|443)'
# 2. 假设发现Apache占用端口,停止Apache
sudo systemctl stop apache2
sudo systemctl disable apache2
# 3. 再次检查端口是否释放
sudo netstat -tlnp | grep -E ':(80|443)'
# 4. 启动nginx
sudo systemctl start nginx
# 5. 启用nginx开机自启
sudo systemctl enable nginx
# 6. 验证nginx运行状态
systemctl status nginx
sudo nginx -t

2024 Alvisliu. All Rights Reserved.