求助nginx绑定多个网站公用80端口的问题

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了求助nginx绑定多个网站公用80端口的问题相关的知识,希望对你有一定的参考价值。

1、修改主配置文件:只用改一个地方:
在http模块里面加入你要引用的虚拟主机配置文件目录即可:
例如:include /etc/nginx/vhosts/chaodiquan.com.conf;此处为你自己的文件
http
log_format main \'$remote_addr - $remote_user [$time_local] "$request" \'
\'$status $body_bytes_sent "$http_referer" \'
\'"$http_user_agent" "$http_x_forwarded_for"\';

access_log /var/log/nginx/access.log main;

sendfile on;
tcp_nopush on;
tcp_nodelay on;
keepalive_timeout 65;
types_hash_max_size 2048;

include /etc/nginx/mime.types;
default_type application/octet-stream;

include /etc/nginx/vhosts/*.conf; //就这里加一行就可以了

2、建立虚拟主机配置目录:
都是在/etc/nginx/ 下面建立vhosts 文件夹,专门放置网站的配置文件:/etc/nginx/vhosts/chaodiquan.com.conf
server
listen 80 ; //注意这里,要把默认的那个default_server去掉,因为我们在下面要单独配置域名访问,所以这里不要留default_server,不然会报错。
server_name chaodiquan.com 多个的域名.com; //这里写你想设置的域名,可以写多个,与名之间用空格隔开
root /mnt/share/chaodiquan.com; //这里是你虚拟机的根目录,写绝对路径
# Load configuration files for the default server block.

location / index index.php index.html index.htm; //这里配置默认访问的页面

location ~* \\.php$ //这里配置php解析.php文件

fastcgi_index index.php;
fastcgi_pass 127.0.0.1:9000;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param SCRIPT_NAME $fastcgi_script_name;

error_page 404 /404.html; //默认的错误页面
location = /40x.html

error_page 500 502 503 504 /50x.html;
location = /50x.html


3、还想再建其他虚拟机,一样的,复制上面那个文件,修改我标注的的哪几个地方即可!
4、虚拟机配置文件配置好了之后,还需要在linux下面的hosts文件下面加上以上域名,不然还是会访问外网的哦。
127.0.0.1 依次对应的你的域名
5、如果我们是要在windows下面访问虚拟机里面的linux下面的网站,那么还要在windows下面配置hosts文件,所有的域名都指向linux服务器,例如:
192.168.2.111 你自己的域名.com

遇到的问题:
nginx: [emerg] a duplicate default server for 0.0.0.0:80 in /etc/nginx/vhosts/1

遇到这个问题,肯定是:
server
listen 80


这个地方80后面的东西都去掉,只留下端口号80,去掉就可以解决这个问题了。
参考技术A 这就是一个虚拟主机配置的问题.
请百度搜索"nginx 虚拟主机配置"就可以找到答案.

Apache的网站,使用Nginx进行反向代理(1个IP绑定多个域名,对应多个网站)解决方案

同一个端口是不能同时有两个程序监听的。所以换个思路解决同一台服务器下某些网站运行在nginx下,某些网站运行在Apache下共存。


解决思路:

将nginx作为代理服务器和web服务器使用,nginx监听80端口,Apache监听除80以外的端口,我这暂时使用8080端口。

解决方案:

  • 在Linux 一经搭建好环境 先后安装了Nginx 和Apache 由于 默认端口都是:80
  • 一般客户请求的服务器端口默认为80 所以Nginx作为静态页端口设置:80;Apache设置端口为:8080(在httpd.conf 文件中修改Listen:8080)
  • Apache下的网站:

在nginx.conf中 添加

  server {
            listen       80;
            server_name  www.one.ityangs.cn one.ityangs.cn;

location / {            
            proxy_pass              http://127.0.0.1:8080;              
            proxy_redirect          off;        
            proxy_set_header Host $host;       
            proxy_set_header X-Real-IP $remote_addr;       
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;           
            } 
}
  • Nginx下的网站:

在nginx.conf中 添加

 server {
        listen       80;
        server_name    two.ityangs.cn www.two.ityangs.cn;
        root   /www/two;
        location /{

            index  index.html index.htm index.php;
             if (!-e $request_filename) {
             rewrite  ^(.*)$  /index.php?s=$1  last;
             break;
            }
            error_page 404  /var/www/html/404.html;
        }


        location ~ \\.php(.*)$ {
                fastcgi_pass   127.0.0.1:9000;
                fastcgi_index  index.php;
                fastcgi_split_path_info  ^((?U).+\\.php)(/?.+)$;
                fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
                fastcgi_param  PATH_INFO  $fastcgi_path_info;
                fastcgi_param  PATH_TRANSLATED  $document_root$fastcgi_path_info;
                include        fastcgi_params;  
        }


}


实际配置截图:
Apache的配置文件,httpd.conf配置
技术分享图片
Nginx的配置文件,nginx.conf的配置
技术分享图片








以上是关于求助nginx绑定多个网站公用80端口的问题的主要内容,如果未能解决你的问题,请参考以下文章

如何让iis和apache公用80端口或者有其他更好的方法? - 技术问答

用Nginx反向代理实现多网站共用80端口

iis下的多个网站如何共用80端口

设置泛域名和设置IIS下面不同网站通过不同域名公用80端口的操作指引

Nginx + Apache 公用 80 端口的配置方案。

Nginx配置80端口用于多个域名