我有一个任务,要用 apache 和 nginx 制作服务器。我使用 CentOS 6.5,在 eth0 上有一个公共 IP,在 eth1(192.168.1.2) 和 eth2 (192.168.1.3) 上有两个内部 IP。Apache 必须在一个 IP (192.168.1.2) 上使用虚拟主机运行两个不同的站点。Nginx 必须在没有域名的公共 IP 上运行另一个网站。当我在浏览器中输入 www.test1.com 或 www.test2.com 时,它应该打开在 apache 上运行的其中一个站点,当我输入公共 IP 时,它应该打开在 nginx 服务器上运行的站点。
编辑1:
目前这是我的最后的解决方案。
/etc/nginx/conf.d/默认.conf
server {
listen 91.xxx.xxx.xxx:8080;
server_name _; # catch all
root /usr/share/nginx/html;
}
server {
listen 91.xxx.xxx.xxx:80;
server_name www.test1.com;
root /non/existant/or/error/pages;
location / {
if ($host = "test1.com")
{
proxy_pass http://test1.com;
}
if ($host = "test2.net")
{
proxy_pass http://test2.net;
}
}
}
等/httpd/conf/httpd.conf
Listen 192.168.1.2:80
NameVirtualHost 192.168.1.2:80
<VirtualHost 192.168.1.2:80 >
ServerAdmin [email protected]
DocumentRoot "/var/www/test1.com/public_html"
ServerName www.test1.com
ServerAlias test1.com
ErrorLog "/var/www/test1.com/error.log"
</VirtualHost>
<VirtualHost 192.168.1.2:80 >
ServerAdmin [email protected]/public_html"
ServerName www.test2.com
ServerAlias test2.com
ErrorLog "/var/www/test2.com/error.log"
</VirtualHost>
和 /etc/hosts
91.xxx.xxx.xxx rangelov310
#Virtual Hosts
192.168.1.2 test1.com
192.168.1.2 test2.com
这是可行的,但如果能以某种方式让 nginx 站点在端口 80 上工作就更好了。
答案1
您的配置看起来还不错。但是您的公共 IP 会出现问题。您无法让 (apache 和 nginx) 都监听您的公共 IP 和端口 80。无论如何,域名 www.test1.com 通常指向一个 IP(私有或公共)。
答案2
这是一个可能的方法
nginx.conf
server {
listen xxxx:80; # public IP port 80 only
server_name _; # catch all
root /some/path/to/static; # static content
}
server {
listen xxxx:80;
server_name www.test1.com # so we can handle public requests
root /non/existant/or/error/pages; # for safety
location / {
proxy_pass 192.168.1.2; # apache site1
}
}
server {
listen xxxx:80;
server_name www.test2.com # so we can handle public requests
root /non/existant/or/error/pages; # for safety
location / {
proxy_pass 192.168.1.3; # apache site2
}
}
阿帕奇
Listen 192.168.1.2:80
Listen 192.168.1.3:80
<VirtualHost 192.168.1.2:80>
ServerAdmin .......
DocumentRoot .......
ServerName www.test1.com
ServerAlies test1.com
</VirtualHost>
<VirtualHost 192.168.1.3:80>
ServerAdmin .......
DocumentRoot .......
ServerName www.test2.com
ServerAlies test2.com
</VirtualHost>
- 确保您没有其他 Listen 指令,否则您将遇到问题。
- 网站只能托管在 1 个内部地址上 - 此处是为了便于阅读
解释
- nginx 用于提供一切服务
- 默认情况下它提供静态内容
- 如果请求 site1 或 site2,它会将请求代理到正在监听私有 IP 地址的 Apache
- apache 仅监听内部地址(这里没有恶作剧)
- 您可能需要所谓的分割视图 DNS,以便可以从整个互联网和内部网络访问网站。
答案3
这是我的解决方案并且对我有用。
/etc/nginx/conf.d/默认.conf
server {
listen 91.xxx.xxx.xxx:8080;
server_name rangelov310;
root /var/www/some/directory;
index index.php;
location ~ \.php$ {
try_files $uri =404;
allow all;
fastcgi_pass unix:/var/run/php-fpm/php-fpm.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
}
server {
listen 91.xxx.xxx.xxx:80;
server_name _;
location / {
if ($host = "test1.com") { #check what address is send from browser
proxy_pass http://test1.com; }
if ($host = "test2.net") {
proxy_pass http://test2.net; }
}
}