我有带有 nginx 和 apache2 的 ubuntu 16.04。有 2 条 DNS A 记录指向这台机器:
- app1.mydomain.com
- app2.mydomain.com
我需要 app1.mydomain.com 由 apache 解析, app2.mydomain.com 由 nginx 解析。两者都在端口 80 上。有可能吗?
此外,apache 需要处理 2 个不同的应用程序(site1 和 site2)。
我想:
- app1.mydomain.com/site1 - 由 apache 解析并运行应用程序 site1
- app1.mydomain.com/site2 - 由 apache 解决并触发应用程序 site2
- app2.mydomain.com - 使用 nginx 服务 ghost 应用程序
这是我的 Apache 配置:
<VirtualHost *:80>
ServerAdmin [email protected]
ServerName app1.mydomain.com
ServerAlias www.app1.mydomain.com
ErrorLog /var/www/site1/logs/error.log
CustomLog /var/www/site1/logs/access.log combined
WSGIScriptAlias /api /var/www/site1/application/index.py/
Alias /static /var/www/site1/application/static
<Directory /var/www/site1/application>
Order deny,allow
Allow from all
</Directory>
AddType text/html .py
ErrorLog /var/www/site2/logs/error.log
CustomLog /var/www/site2/logs/access.log combined
WSGIScriptAlias /site2 /var/www/site2/index.py/
Alias /site2/uploads /var/sftp/site2/uploads/
<Directory /var/www/site2/>
Order deny,allow
Allow from all
</Directory>
这是我的 NGINX 配置文件:
server {
listen 8080;
listen [::]:8080;
server_name app2.mydomain.com;
root /var/www/ghost/system/nginx-root;
location / {
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header Host $http_host;
proxy_pass http://127.0.0.1:2368;
}
location ~ /.well-known {
allow all;
}
client_max_body_size 50m;
}
首先。Apache 和 Nginx 是 Web 服务器,而不是dns 服务器。他们不解决任何问题。这个问题与 DNS 无关,而与 Web 服务器如何处理请求有关。
不,这是不可能的。两个应用程序不能监听同一个端口。您可以通过两种方式解决此问题:
或者 - 使两者都由同一个网络服务器托管。Apache 和 nginx 在很多情况下在技术层面上是可以互换的,所以从应用程序的角度来看,这并不重要。在管理方面,他们是相当不同的。
我注意到您在端口 8080 上运行 nginx,所以我假设您想使用 apache 作为代理。然后为 apache 创建一个新的虚拟主机,例如
/etc/apache2-sites-available/app2.mydomain.com.conf
:然后运行
sudo a2enmod proxy_http; sudo a2ensite app2.mydomain.com; sudo service apache2 reload
。这将启用 mod_proxy、mod_proxy_http 并使 apache 将对 VirtualHost app2.mydomain.com 的任何请求转发到 nginx,根据您的配置,nginx 在端口 8080 上运行。
我没有测试过这个配置,所以可能需要一些调整。
作为旁注:为什么需要 nginx?根据 nginx 设置,它只是代理对在端口 2368 上运行的其他一些网络服务器的请求。您可以直接使用 apache 代理...
mod_proxy -documentation 在调整它时可能很方便。
根据您的问题内容,您已经解决了,除了每个端口只能访问一个应用程序#。你不能在同一个端口上同时运行 Apache2 和 Nginx。这是不可能的。
既然你提到你已经让你的 DNS 工作并指向正确的机器 (IP)。
app1.mydomain.com
默认情况下,您可以通过以下方式访问您的 (port 80
):那是一样的
您必须为您的 Nginx 指定端口,您可以通过配置文件为
port 8080
.使用它来访问您的站点1:
如果您指定了错误的端口,无论使用的域名如何,都会加载默认页面。对于 Apache,默认是第一个虚拟主机,除非指定不同。