在Ubuntu 16.04中安装Nginx时出现错误。

:~$ sudo apt-get remove nginx* && sudo apt-get install nginx-full*
正在读取软件包列表... 完成 正在构建依赖关系树 正在读取状态信息... 完成
此操作将使用额外的 5,579 kB 磁盘空间。 是否继续?[Y/n] y 获取:1 http://in.archive.ubuntu.com/ubuntu xenial-updates/universe amd64 nginx-full-dbg amd64 1.10.0-0ubuntu0.16.04.1 [3,789 kB] 已下载 3,789 kB,共耗时 33s (112 kB/s) 正在选择未选择的软件包 nginx-common。 (正在读取数据库 ... 系统当前共安装有 189767 个文件和目录。) 正在准备解包 .../nginx-common_1.10.0-0ubuntu0.16.04.1_all.deb ... 正在解包 nginx-common (1.10.0-0ubuntu0.16.04.1) ... 正在选择未选择的软件包 nginx-full。 正在准备解包 .../nginx-full_1.10.0-0ubuntu0.16.04.1_amd64.deb ... 正在解包 nginx-full (1.10.0-0ubuntu0.16.04.1) ... 正在选择未选择的软件包 nginx-full-dbg。 正在准备解包 .../nginx-full-dbg_1.10.0-0ubuntu0.16.04.1_amd64.deb ... 正在解包 nginx-full-dbg (1.10.0-0ubuntu0.16.04.1) ... 正在处理用于 ufw (0.35-0ubuntu1) 的触发器 ... 已更新配置文件 '/etc/ufw/applications.d/apache2-utils.ufw.profile' 已更新配置文件 '/etc/ufw/applications.d/nginx.ufw.profile'
正在处理用于 systemd (229-4ubuntu4) 的触发器 ... 正在处理用于 ureadahead (0.100.0-19) 的触发器 ... 正在处理用于 man-db (2.7.5-1) 的触发器 ... 正在设置 nginx-common (1.10.0-0ubuntu0.16.04.1) ... 正在设置 nginx-full (1.10.0-0ubuntu0.16.04.1) ... nginx.service 作业失败,因为控制进程以错误代码退出。有关详细信息,请参阅 "systemctl status nginx.service" 和 "journalctl -xe"。
invoke-rc.d: initscript nginx, action "start" failed.
正在处理用于 dpkg (1.18.4ubuntu1.6) 的触发器 ... 正在处理用于 ufw (0.35-0ubuntu1) 的触发器 ... 已更新配置文件 '/etc/ufw/applications.d/apache2-utils.ufw.profile' 已更新配置文件 '/etc/ufw/applications.d/nginx.ufw.profile'
正在处理用于 systemd (229-4ubuntu4) 的触发器 ... 正在处理用于 ureadahead (0.100.0-19) 的触发器 ... 正在处理用于 man-db (2.7.5-1) 的触发器 ... 正在处理用于 dpkg (1.18.4ubuntu1.6) 的触发器 ... 正在处理用于 ufw (0.35-0ubuntu1) 的触发器 ... 已更新配置文件 '/etc/ufw/applications.d/apache2-utils.ufw.profile' 已更新配置文件 '/etc/ufw/applications.d/nginx.ufw.profile'
正在处理用于 systemd (229-4ubuntu4) 的触发器 ... 正在处理用于 ureadahead (0.100.0-19) 的触发器 ... 正在处理用于 man-db (2.7.5-1) 的触发器 ... 正在处理用于 dpkg (1.18.4ubuntu1.6) 的触发器 ... 正在处理用于 ufw (0.35-0ubuntu1) 的触发器 ... 已更新配置文件 '/etc/ufw/applications.d/apache2-utils.ufw.profile' 已更新配置文件 '/etc/ufw/applications.d/nginx.ufw.profile'
正在处理用于 systemd (229-4ubuntu4) 的触发器 ... 正在处理用于 ureadahead (0.100.0-19) 的触发器 ...

尝试在不指定任何软件包的情况下使用 apt-get -f install 命令。 - Motte001
已经检查过了,还是同样的错误!!请看::~$ sudo apt-get -f installnginx-full-dbg 依赖于 nginx-full (= 1.10.0-0ubuntu0.16.04.1);然而: 包 nginx-full 尚未配置。dpkg:处理软件包 nginx-full-dbg (--configure)时出错: 依赖问题 - 未配置 在处理时遇到错误:nginx-full nginx-full-dbgE: 子进程 /usr/bin/dpkg 返回错误代码 (1) - Mohit
1在安装nginx之前,你是否已经安装并运行了端口80上的Apache?请编辑你的问题,包括systemctl -l status nginx的输出。 - Thomas Ward
你是否安装了不同版本的nginx?我看到你运行了一个删除任务,但如果旧的配置仍然存在,它们可能会破坏安装,因为它们可能包含已弃用的命令或类似的内容。 - Thomas Ward
请参阅“systemctl status nginx.service”和“journalctl -xe”以获取详细信息。 - David Foerster
可能是nginx配置中出现了错误,导致无法启动(或者在nginx配置中提到的IP不可用)。显然,启动nginx已成为安装过程的一部分。 - krio
对不起,大家!实际上我发现这是一个Apache错误,因为它正在使用端口80。现在请告诉我,我应该卸载Apache 2还是只需在安装Nginx时停止服务。 现在我遇到了一个不同的错误,就是在卸载apache2之后,所有的东西(包括nginx)都已经安装好了,除了apache,但是当我检查nginx默认页面时仍然显示apache2的网页。请帮忙! - Mohit
还有一件事,我注意到当我们安装phpmyadmin时,告诉我,在此之前phpmyadmin只使用apache服务运行吗?因为我发现在没有安装apache服务器的情况下,在http://localhost上它会给出apache默认页面,而在我们进入http://localhost/phpmyadmin时,就像我在上面的消息中告诉您的那样(我安装了LEMP; https://www.digitalocean.com/community/tutorials/how-to-install-linux-nginx-mysql-php-lemp-stack-in-ubuntu-16-04):404 Not Foundnginx/1.10.0 (Ubuntu) - Mohit
$ systemctl status nginx.service ● nginx.service - 一个高性能的Web服务器和反向代理服务器 已加载: 已加载 (/lib/systemd/system/nginx.service; enabled; ├─16289 nginx: 主进程 /usr/sbin/nginx -g daemon on; master_process on ├─16290 nginx: 工作进程
├─16291 nginx: 工作进程
├─16292 nginx: 工作进程
└─16293 nginx: 工作进程
目前已安装nginx并且给出了这样的状态,谢谢,帮忙!
- Mohit
请在需要添加信息时,请您编辑您的帖子,尤其是文件或程序输出列表(可以使用编辑器工具栏上的{}按钮)更易读。或者,您可以使用pastie服务来处理较长的列表,并将pastie的链接包含在您的问题中。总体而言,最好将所有相关内容放在一个地方。此外,评论可能会因各种原因被删除。 - David Foerster
小心!sudo apt-get remove nginx* 并不是你想的那样。它是正则表达式,所以会匹配包含ngin的任何字符串,我刚刚意外地删除了docker-engine - Tony I.
感谢上面的建议;显然,一个LEB提供商的默认Ubuntu镜像预先包含了Apache,并且由于某种奇怪的原因它正在运行。在安装Nginx之前,我不得不卸载(或者至少停用/禁用)Apache。 - geerlingguy
9个回答

在安装nginx之前先关闭apache2应该可以解决这个问题。
sudo service apache2 stop

3欢迎来到Ask Ubuntu!我建议[编辑]这个回答,以具体细节介绍如何操作。(另请参阅如何撰写好的回答,获取关于Ask Ubuntu上什么样的回答被认为最有价值的一般建议。) - David Foerster
这给了我所需的提示。在我的情况下,我正在使用一个运行另一个nginx服务器的docker容器。 - mithril_knight
我遇到了同样的问题,但是通过使用netstat -tulpn | grep :80命令找到了罪魁祸首。在我的情况下,罪魁祸首是配置为监听端口80的Varnish。通过执行systemctl stop varnish命令停止Varnish,然后安装Nginx,问题得到了解决。至于为什么Debian/Ubuntu软件包在安装时会尝试自动启动,这超出了我的理解...我更愿意先安装软件,按照自己的喜好进行配置,然后再启动它 :P - geerlingguy
很奇怪NGINX在他们的安装程序中没有检查这一点,并且至少提供一个更有帮助的消息。Apache在Linux系统上非常常见。 - machineghost
是的,这对我来说有效,但是应该交叉验证其他使用端口80的进程,并停止它们以便安装nginx。 - Sameer Kumar Choudhary

Andrew Chan为我提供了正确答案。为了扩展他的答案,这是您可以在命令行上执行的操作;

停止apache2

sudo systemctl stop apache2.service

防止apache2在启动时自动启动

sudo systemctl disable apache2.service

重新安装nginx

sudo apt-get install nginx


1我建议您在启动时不要禁用Apache2,如果您需要它的话 - 在许多情况下,如果您最终配置Apache在另一个端口上进行监听,就无需禁用它。通过自己的经验,对于某些设置,我可以谈谈一些经验(我还在nginx软件包中做了很多工作,这就是这些经验的来源)。 - Thomas Ward

在我的情况下,错误是服务器禁用了IPv6。 解决方案: 编辑/etc/nginx/sites-enabled/default并注释掉IPv6。
listen [::]:80 default_server;

重新安装nginx:
apt purge nginx
apt autoremove
apt install nginx

@DavidFoerster 随着apt 1.0的推出,引入了一个新的二进制文件,该文件汇集了分散在apt-getapt-cache等命令中的许多熟悉的(子)命令。例如,apt update相当于apt-get updateapt search some-name相当于apt-cache search some-name以此类推。在某些情况下,进行了一些重新措辞,例如apt full-upgrade相当于apt-get dist-upgrade。对于喜欢旧命令的人来说,旧的二进制文件及其命令仍然可用。 - Henning Kockerbeck
@HenningKockerbeck:谢谢。当时我真的不知道,以为那是一个打字错误,但后来我自己进行了学习。 - David Foerster
对我来说有效,但是我无法在我的服务器部署脚本中实现这个,太绕了一点... - Menasheh

我刚刚遇到了这个问题,但解决方案有些不同。
一旦我解决了一个简单的网站配置错误,就能够更新nginx。
请检查你的nginx错误日志:
sudo cat /var/log/nginx/error.log|less

然后再试一次:

sudo apt-get update;sudo apt-get upgrade

日志万岁,就我而言,80端口已经被占用,这就是错误的原因。 - xliiv

在我的情况下,除了这个之外没有任何帮助。
sudo fuser -k 80/tcp

service nginx start

在我的情况下,这是/etc/nginx/sites-enabled/中的一个配置错误的文件。 我将它们命名为.old文件,但这并不重要。它们将被读取,并可能阻止该服务的成功安装或启动。 请小心处理该文件夹中的文件,并仔细阅读错误输出,如@Taiger所述。

在安装之前,请从 /sites-enabled 目录中删除任何手动添加的符号链接。


这真让我疯了。我没意识到我在sites-enabled中有旧的站点,而且尝试了所有的方法。我很高兴我滚动到底部。 - Michael

当我检查/var/log/nginx/error.log时,我发现安装程序无法打开/var/cache/nginx/microcache。
目录列表显示没有/var/cache/nginx目录,所以我创建了它,安装成功。

我看到你想要重新安装Nginx,但是当我们在Docker容器中运行Nginx时可能会出现相同的错误。

在这种情况下,只需查看已启动的容器:

user@host:~$ docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             
STATUS              PORTS                                      NAMES
f4ee2264d5fb        docker_nginx        "nginx -g 'daemon of…"   5 months ago        Up 2 days           0.0.0.0:80->80/tcp, 0.0.0.0:443->443/tcp   nginx

请停止使用容器ID。
docker stop f4ee2264d5fb

然后你就可以安装Nginx了。