扫二维码与项目经理沟通
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流
这篇文章主要介绍“Nginx一个IP怎么配置多个站点”,在日常操作中,相信很多人在Nginx一个IP怎么配置多个站点问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Nginx一个IP怎么配置多个站点”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!
成都创新互联是一家专注于成都网站制作、网站设计、外贸网站建设与策划设计,紫阳网站建设哪家好?成都创新互联做网站,专注于网站建设十多年,网设计领域的专业建站公司;建站业务涵盖:紫阳等地区。紫阳做网站价格咨询:13518219792
环境
手头上正好有一台阿里云学生机,趁着没过期,就拿来用吧。
操作系统:centos7
php-fpm
nginx
初始化
在centos上搭建php-fpm+nginx环境不是很难,网上有很多的帖子,按照上面讲解的,把需要安装的软件安装一下就行了。
目录一览
安装完毕后,配置文件通常会在/etc/nginx目录下,我这边的内容如下:
里面的nginx.conf就是默认的配置文件了。下面简单的来看下里面的大致内容。
一般来说,除非有特别需求,我们不会修改nginx.conf文件里面的内容。现在的话,可以把这个文件当做我们的参考项。
我个人认为里面比较重要的配置项有这么几个:
http:这个节点就代表了一个nginx,是我们的大总管。它内部可以有多个server配置项,代表多个站点。
include /etc/nginx/conf.d/*.conf; 这一行虽然看起来不起眼,但是对于配置多个站点而言,及极其的重要。这点待会再讲。
log_format: 日志的格式,这点将体现在nginx日志记录的动作上。
access.log: 在这个选项的第一个单词是main,就是刚才log_format定义的日志格式了。后面对于error.log 同样适用。
server节点:一个server节点,包含了对一个站点的配置,这里面的同名内容将会覆盖http节点的配置,所以优先级对于一个站点而言,相对更高一点。
include /etc/nginx/default.d/*.conf 不难看到这个配置出现在server节点内部,所以还是对本站点配置起作用的。这个default.d目录存放的是对于所有server节点通用性的功能,其存在的意义就是能让我们少写一些重复性的配置内容。而是抽取出来,放到一个通用的目录下。
location的内容,待会再讲。
配置
下面进入正题,看看如何在一个ip上配置多个站点。那么首先,我们需要先创建几个文件夹,然后作为我们的多个站点。
站点准备
在home/www目录下创建两个文件夹,一个是blog一个是forum,然后里面分别放一个index.php,注意内容可以良好的区分就可以了。
添加配置文件
刚才我们也了解到,有多个站点的话其实就是多个server节点,在nginx.conf中通过include /etc/nginx/conf.d/*.conf来引入到了http节点,所以我们只需要在/etc/nginx/conf.d/目录下创建我们特定于某个站点所需要的配置文件就可以了。
注意: 注意后缀名为.conf,不然按照include的规则,无法正确引入相关的配置文件。
你也可以像我这么做,如下:
左侧的fastcgi_param script_filename 写错了,应该是$document_root,图片上没改过来,这点明确一下就可以了。
添加完配置文件之后就可以,重启nginx了。在centos上重启的命令如下:
systemctl restart nginx
如果你的是debian系的linux的话,也可以使用:
service nginx restart
这时,可以通过浏览器访问,看看我们的配置项到底成功了没有。
这样就成功的在一个ip上通过端口不同,配置了多个站点了。
疑难杂项
一开始刚刚接触nginx的时候,对这个配置文件实在是摸不着头脑。那个时候,在我的印象中,php+apache才是黄金组合,没想到随着接触nginx的时间变长,php-fpm+nginx的组合让我大开眼界。
在配置的道路上,总会有那么几个问题,一直困扰着我,下面我就总结一下,我个人认为的比较重要的问题吧。
fastcgi_pass
在server节点的location内部,有这么一个配置项。很是让人摸不着头脑
location ~ \.php$ { root /home/wwwroot; fastcgi_pass 127.0.0.1:9000; #fastcgi_pass unix:/var/run/php-fpm/php-fpm.sock; #fastcgi_pass unix:/tmp/php-cgi.sock; try_files $uri /index.php =404; fastcgi_split_path_info ^(.+\.php)(/.+)$; fastcgi_index index.php; fastcgi_param script_filename $document_root$fastcgi_script_name; include fastcgi_params; }
从上面的配置文件中,我们也看到了好多个对它的不同的配置,那么到底该怎么选择呢?
在网上我找到了这么一条回答,感觉人家讲的挺好的。有兴趣的可以看看下面这篇文章。https://segmentfault.com/q/1010000004854045
总结来讲,有这么几点内容:
nginx+php-fpm的进程间通信有两种方式
一个是tcp,另一个是unix domain socket。
tcp: 格式为ip:端口, 可以跨服务器。
unix domain socket不经过网络,只能用于nginx跟php-fpm都在同一个服务器上的场景。
那么,对我们来说,要怎么选择呢? 答案是取决于php-fpm的配置。有下面两种方式:
方式一:
php-fpm.conf: listen = 127.0.0.1:9000 nginx.conf:fastcgi_pass 127.0.0.1:9000
方式二:
php-fpm.conf: listen = /tmp/php-fpm.sock nginx.conf: fastcgi_pass unix:/tmp/php-fpm.sock
这里面php-fpm.sock是一个文件,是由php-fpm生成的,类型为srw-rw—-, 具体这个路径怎么写,还是取决于你本地的php-fpm生成的sock文件的位置。
这两种都可以成功让php-fpm和nginx组合起来,区别什么的,贴出大佬的原话应该比较有说服力。
unix domain socket可用于两个没有亲缘关系的进程,是目前广泛使用的ipc机制,比如x window服务器和gui程序之间就是通过unix domain socket通讯的.这种通信方式是发生在系统内核里而不会在网络里传播.unix domain socket和长连接都能避免频繁创建tcp短连接而导致time_wait连接过多的问题.对于进程间通讯的两个程序,unix domain socket的流程不会走到tcp那层,直接以文件形式,以stream socket通讯.如果是tcp socket,则需要走到ip层,对于非同一台服务器上,tcp socket走的就更多了.
所以,下次就不用再纠结这个问题了,php-fpm.conf和nginx.conf的相关项保持一致就好了。
到此,关于“Nginx一个IP怎么配置多个站点”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注创新互联网站,小编会继续努力为大家带来更多实用的文章!
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流