我在 Nginx 服务器上有一个 Rails 应用程序(example1.com
),使用以下配置:
server {
access_log off;
passenger_enabled on;
client_max_body_size 5M;
listen 10.10.10.10:80;
server_name www.example1.com;
rails_env production;
root /var/www/production/example1/public;
location / {
root /var/www/production/example1/public;
index index.html index.htm;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
一切正常。但是,现在我必须example2.com
使用 Apache 安装另一个应用程序()。我的问题是 Apache 和 Nginx 实际上在同一台机器上,使用相同的 IP(public
238.x.x.x
和private
10.x.x.x
)和相同的端口(80
)。所以每次我尝试访问时example2.com
,它实际上都会显示example1.com
。这是我的 Apache 配置:
<VirtualHost *:80>
ServerAdmin [email protected]
ServerName www.example2.com
DocumentRoot /var/www/production/example2
DirectoryIndex index.html
LogLevel Emerg
ErrorLog /var/log/api/example2.com_err
CustomLog /var/log/api/example2.com_cust Combined
<Directory /var/www/production/example2>
Options +ExecCGI
AllowOverride all
</Directory>
</VirtualHost>
我听说使用ProxyPass
可以解决这个问题,但我缺乏这方面的知识,需要一些帮助。有办法吗?
答案1
这相当简单。Nginx 监听其感兴趣的域的 IP/端口,并将您告诉它的请求传递给 Apache。只需定义另一个 nginx 服务器块(通常在不同的配置文件中)即可,这样可以让您轻松完成操作 - nginx 并不关心。
您可能需要在 proxy_pass 区域中添加一些语句 - 请先尝试这个简单的案例,然后看看效果如何。
server {
# removed extra lines - put back as required
listen 10.10.10.10:80; # This line likely unnecessary
server_name www.example2.com;
location / {
proxy_pass 10.x.x.x:81
}
}
更改 Apache 以监听不同的端口。例如
<VirtualHost *:81>
尽管您可以完全放弃 Apache,让 Nginx 位于两个应用程序的前面,除非您出于某种原因确实需要 Apache。对于新位置,情况类似,看起来您只是在提供静态文件。
server {
# removed extra lines - put back as required. Logging etc.
listen 10.10.10.10:80; # This line likely unnecessary
server_name www.example2.com;
root /var/www/production/example2;
}