/etc/nginx/conf.d/默认.conf

/etc/nginx/conf.d/默认.conf

我有一个任务,要用 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; }
    } 
}

相关内容