我有一个nginx的问题.我尝试了不同的解决方案,但对我来说没什么用.这是我的错误:
4 root@BANANAS ~ # sudo service nginx restart :(
Restarting nginx: nginx: [emerg] bind() to [::]:443 failed (98: Address already in use)
nginx: [emerg] bind() to [::]:443 failed (98: Address already in use)
nginx: [emerg] bind() to [::]:443 failed (98: Address already in use)
nginx: [emerg] bind() to [::]:443 failed (98: Address already in use)
nginx: [emerg] bind() to [::]:443 failed (98: Address already in use)
nginx: [emerg] still could not bind()
nginx.
Run Code Online (Sandbox Code Playgroud)
你能帮助我吗?
Far*_*ahi 72
可能其他进程正在使用指定端口:
sudo netstat -tulpn
Run Code Online (Sandbox Code Playgroud)
获取已使用443的进程的PID.并使用kill命令发送信号.
sudo kill -2 <PID>
sudo service nginx restart
Run Code Online (Sandbox Code Playgroud)
或者你可以这样做:
sudo fuser -k 443/tcp
Run Code Online (Sandbox Code Playgroud)
确保您不使用旧语法:
server {
listen :80;
listen [::]:80;
}
Run Code Online (Sandbox Code Playgroud)
上面的语法会导致
nginx: [emerg] bind() to [::]:80 failed (98: Address already in use)
Run Code Online (Sandbox Code Playgroud)
正确的语法:
server {
listen 80;
listen [::]:80 ipv6only=on;
}
Run Code Online (Sandbox Code Playgroud)
要么
server {
listen [::]:80;
}
Run Code Online (Sandbox Code Playgroud)
以上两种语法都可以实现相同的功能,同时监听ipv4和ipv6.
另一种方法(根据我的经验)是强制退出该端口上运行的进程 443
sudo fuser -k 443/tcp
Run Code Online (Sandbox Code Playgroud)
或者如果您在端口上运行,80只需将端口更改为
sudo fuser -k 80/tcp
Run Code Online (Sandbox Code Playgroud)
希望它可以帮助遇到同样问题的人
替代使用lsof:
找到PID并杀死端口上运行的进程 443
sudo kill -9 $(lsof -t -i :443)
Run Code Online (Sandbox Code Playgroud)
小智 6
谢谢你的回答。运行后
sudo netstat -tulpn
Run Code Online (Sandbox Code Playgroud)
我意识到我在端口 80 上运行了 apache2。这可能是在我使用 Certbot 在服务器上安装 SSL 之后完成的。我删除了 Apache2,服务器启动并运行。
apt remove apache2
Run Code Online (Sandbox Code Playgroud)
这成功了!再次感谢你。
小智 6
首先,我们必须检查端口 80 上运行了多少服务。要检查这一点,您可以运行以下命令:
sudo netstat -plant | grep 80
Run Code Online (Sandbox Code Playgroud)
这将向您显示哪个服务正在侦听端口 80,然后您可以决定是否要按原样使用该服务还是使用 Nginx。
如果是 Apache,您需要决定是使用 Apache 还是 Nginx。
如果您只想使用 Nginx,则需要先停止 Apache:
sudo systemctl stop apache2 && sudo systemctl start nginx
Run Code Online (Sandbox Code Playgroud)
由于在同一服务器块中意外地重复监听指令两次,我收到了上述错误,如下所示:
server {
listen [::]:443 ssl ipv6only=off;
listen 443 ssl;
...
}
Run Code Online (Sandbox Code Playgroud)
将其更改为:
server {
listen 443 ssl;
...
}
Run Code Online (Sandbox Code Playgroud)
或者
server {
listen [::]:443 ssl ipv6only=off;
...
}
Run Code Online (Sandbox Code Playgroud)
解决了重启服务器时的问题: sudo service nginx start
| 归档时间: |
|
| 查看次数: |
49707 次 |
| 最近记录: |