如何在Ubuntu上同时运行nginx和Apache?

65
我希望配置Ubuntu上的Apache和nginx一起运行,因为我想在nginx和Apache上都进行开发。我已经阅读了一些资料,了解到我需要编辑Apache或nginx的配置文件,使其中一个运行在另一个端口(而不是80端口)。
要在Nginx上更改端口以使其运行,应该编辑哪些文件?

2
你已经回答了自己的问题,并且是正确的,你需要为每个守护进程/服务器使用不同的端口。你到目前为止尝试了什么?你安装了两个软件包并尝试修改配置了吗? - apesa
谢谢apesa。你能告诉我需要编辑哪些文件才能让nginx在另一个端口而不是80上运行吗?因为我想在80上运行apache。 - maths
1
然而,有趣的一点是,两个安装程序都有一个 /var/www/index.html 文件。因此,一旦第二个服务器正常运行起来,它将默认显示另一个服务器的首页。 - Alexis Wilke
@AlexisWilke:说得好。因此,在安装第二个服务器之前,最好将该文件复制到另一个名称(也许是“index.htm”),然后更改欢迎页面设置以指向重命名的文件。然后再安装第二个服务器。 - MestreLion
顺便问一下,我想知道 dpkg 对于两个“共享”/覆盖同一文件的软件包有何看法...哦,apt upgrade 上的冲突可能会很棘手... - MestreLion
@MestreLion 是的,你会收到一个错误提示,但你仍然可以强制安装。如果你愿意,你可以保存这个文件,这并不是一个重要的文件。无论如何,我会编辑这两个服务器的设置,并将默认的“/var/www”根目录更改为类似于“/var/www/<网站名称>”(或“/var/www/<服务器名称>/<网站名称>”,但这样你就会多了一个子目录,可能没有什么帮助)。 - Alexis Wilke
6个回答

50

进入/etc/nginx/sites-available目录,然后修改主机文件以便监听不同的端口(如果您这里没有更改,则会找到一个名为default的文件,请进入进行更改)

在文件中将listen: 80更改为您想要监听的端口

别忘了重新加载服务:service nginx reload


谢谢,那个方法有效!我之前也试过,但是我一直在尝试访问没有端口号的网站。所以在更改默认文件和将端口更改为8080后,我成功地访问了该网站:www.mysite.com:8080。 - maths

30

5
为什么让Apache监听不同的端口会更好?是否更易于操作?是否有更好的性能表现? - weezilla
3
我认为这是为了更好的性能。nginx 从底层开始构建,作为反向代理和静态页面 Web 服务器,似乎在处理静态页面时表现最佳(具有最佳并发管理,而且如果不需要加载解释器,则没有负荷),而 apache 在处理动态页面时表现更佳(内置解释器)。我相信 apache 也可以做反向代理,但比使用 nginx 更加棘手,并且似乎这样做会失去一些有趣的 apache 特性。 - cedbeu
因为我认为逻辑是正确的,所以点赞了...但是,更详细的答案会更好:为什么要使用nginx,以及更多的过程细节... - cedbeu
1
做起来更容易,亲爱的 @weezilla - hassan ketabi
@hassanketabi:就更改主要监听端口而言,两者同样容易:在单个/etc/.../conf文件中的一行即可完成,这是一个合适的解释。我认为@cedbeu的理由更加明智和合适的证明。 - MestreLion

19

如何在同一80端口(本地主机)上安装Apache和NGINX的答案在这里。

假设你已经安装了NGINX和Apache...

1. 为每个服务选择不同的IP地址。

让我们设置hosts文件以便快速访问起始页。

sudo nano /etc/hosts

追加行(使用任何您喜欢的本地IP)

127.0.0.1   nginx
127.0.0.2   apache

2. 设置NGINX监听的IP地址和端口

NGINX必须只监听一个IP地址。

sudo nano /etc/nginx/sites-enabled/default

替换这些行

---(删除行) +++(添加行)

--- listen 80 default_server;
--- listen [::]:80 default_server;
+++ listen nginx:80;

如果您想使用SSL,请对443端口进行相同的操作。

重要提示!

确保所有启用的NGINX网站都监听nginx:80端口

重新启动NGINX

sudo service nginx restart

使用命令 sudo netstat -tulpn | grep :80 进行检查。

tcp        0      0 127.0.0.1:80            0.0.0.0:*               LISTEN      26540/nginx: master

完成!现在您可以通过网址http://nginx访问默认的NGINX主机。

3. 为Apache设置监听IP和端口

Apache必须只监听一个IP地址。

端口:

sudo nano /etc/apache2/ports.conf

替换这些行

---(删除的行) +++(新增的行)

--- Listen 80
--- Listen 443
+++ Listen apache:80
+++ Listen apache:443

默认虚拟主机:

sudo nano /etc/apache/sites-enabled/000-default

并替换这些行

---(删除行) +++(添加行)

--- <VirtualHost *:80>
+++ <VirtualHost apache:80>

如果您想使用SSL,请对443端口做相同的设置。

重要提示!

确保所有启用的Apache网站都监听apache:80端口

重新启动Apache

sudo service apache2 restart

使用命令 sudo netstat -tulpn | grep :80 进行检查。

tcp        0      0 127.0.0.2:80            0.0.0.0:*               LISTEN      26829/apache2

完成!现在您可以通过URL http://apache 访问默认的Apache主机。


2
这是一种非常聪明的技巧,可以在相同的80/443端口上同时启用两者,但是请注意,这样您的服务器只会监听来自自己机器的请求。它们不会响应局域网或互联网请求。 - MestreLion
1
仍然要为提供非常详细的指南以更改两个服务器的端口而加1分。如果任何人只想更改端口号(例如从80更改为8080),则只需忽略有关编辑/etc/hosts的第一部分即可。 - MestreLion
有没有办法让这个解决方案不仅在我的机器上工作? 无论如何,谢谢你,这是最完整的逐步指南,也是最有用的.. 谢谢你,谢谢。 - Francesco Orsi

8

我曾经遇到类似的问题,我在Ubuntu 14.04上运行了Apache,并需要安装nginx。在安装nginx后,我将它的监听端口从默认的80端口改为81端口,这样就成功解决了问题。按照以下指示来实现:

cd /etc/nginx/sites-available
sudo cp default default.bak
sudo nano default

在这里更改端口。

server {
listen 81 default_server;
listen [::]:81 default_server ipv6only=on;

保存并退出nano,然后使用以下命令重新启动ngnix:
sudo service nginx restart

在浏览器中打开 http://localhost:81,如果显示“your server is up”,则表示您的服务器正常运行。

3
如果Apache在端口80上运行,那么你需要更改Apache监听端口或者Nginx监听端口。要更改Nginx的监听端口,请使用Nano或其他编辑器打开“/etc/nginx/sites-available/default”文件,然后更改这两行:
 listen 80 default_server;
 listen [::]:80 default_server ipv6only=on;

为了

 listen 8000 default_server;
 listen [::]:8000 default_server ipv6only=on;

如果端口8000未绑定到任何其他服务,则可以通过service nginx reload重新加载nginx。

1

我通过修改Apache ports.conf文件中的端口解决了这个问题。

您可以通过以下方式编辑它:

sudo nano /etc/apache2/ports.conf

如果你想改变Nginx端口,只需要在site-available文件中修改即可。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接