Nginx一个IP如何配置多个站点的方法教程

发布时间 - 2026-01-11 03:05:55    点击率:

前言

对于Nginx,一个IP上配置多个站点还是很常见的。尤其是在开发环境上,更是如此。

下面在我的阿里云上简单的实现这样一个需求:

在一个IP上通过对端口区分来配置多个站点。

环境初始化目录一览配置站点准备添加配置文件疑难杂项fastcgi_passNginxphp-fpm的进程间通信有两种方式总结

环境

手头上正好有一台阿里云学生机,趁着没过期,就拿来用吧。

  • 操作系统: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的配置,内容实在是太多了,暂且就先总结到这里吧。


# nginx多站点配置  # nginx配置多个站点  # nginx  # 站点配置  # Linux 6下安装编译安装Nginx的步骤  # Nginx的使用经验小结  # keepalived实现nginx高可用  # Linux下nginx生成日志自动切割的实现方法  # Nginx 防止被域名恶意解析的办法  # nginx使用nginx-rtmp-module模块实现直播间功能  # Laravel 5.5官方推荐的Nginx配置学习教程  # PHP使用Nginx实现反向代理  # 关于Spring Boot WebSocket整合以及nginx配置详解  # Nginx 介绍及日常管理的详解  # 多个  # 配置文件  # 就可以  # 的是  # 几个  # 目录下  # 会在  # 一台  # 摸不着头脑  # 有两种  # 重启  # 这里面  # 大佬  # 再讲  # 是一个  # 器上  # 我就  # 如果你  # 让我  # 是在 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: Windows10怎样连接蓝牙设备_Windows10蓝牙连接步骤【教程】  怎么制作网站设计模板图片,有电商商品详情页面的免费模板素材网站推荐吗?  javascript基于原型链的继承及call和apply函数用法分析  Win11怎么修改DNS服务器 Win11设置DNS加速网络【指南】  ,怎么在广州志愿者网站注册?  C++时间戳转换成日期时间的步骤和示例代码  如何在新浪SAE免费搭建个人博客?  Laravel路由怎么定义_Laravel核心路由系统完全入门指南  Laravel如何使用Facades(门面)及其工作原理_Laravel门面模式与底层机制  Laravel用户认证怎么做_Laravel Breeze脚手架快速实现登录注册功能  Laravel怎么实现观察者模式Observer_Laravel模型事件监听与解耦开发【指南】  canvas 画布在主流浏览器中的尺寸限制详细介绍  bing浏览器学术搜索入口_bing学术文献检索地址  如何快速搭建高效WAP手机网站吸引移动用户?  INTERNET浏览器怎样恢复关闭标签页_INTERNET浏览器标签恢复快捷键与方法【指南】  如何在阿里云部署织梦网站?  如何在阿里云完成域名注册与建站?  创业网站制作流程,创业网站可靠吗?  香港服务器租用费用高吗?如何避免常见误区?  浅述节点的创建及常见功能的实现  瓜子二手车官方网站在线入口 瓜子二手车网页版官网通道入口  Angular 表单中正确绑定输入值以确保提交与验证正常工作  ,交易猫的商品怎么发布到网站上去?  详解Nginx + Tomcat 反向代理 如何在高效的在一台服务器部署多个站点  Laravel用户密码怎么加密_Laravel Hash门面使用教程  mc皮肤壁纸制作器,苹果平板怎么设置自己想要的壁纸我的世界?  Android GridView 滑动条设置一直显示状态(推荐)  百度浏览器如何管理插件 百度浏览器插件管理方法  ChatGPT常用指令模板大全 新手快速上手的万能Prompt合集  如何正确下载安装西数主机建站助手?  html5如何设置样式_HTML5样式设置方法与CSS应用技巧【教程】  Python文本处理实践_日志清洗解析【指导】  如何基于PHP生成高效IDC网络公司建站源码?  如何用PHP快速搭建CMS系统?  Laravel任务队列怎么用_Laravel Queues异步处理任务提升应用性能  Win11怎么恢复误删照片_Win11数据恢复工具使用【推荐】  图册素材网站设计制作软件,图册的导出方式有几种?  Laravel DB事务怎么使用_Laravel数据库事务回滚操作  千库网官网入口推荐 千库网设计创意平台入口  如何用5美元大硬盘VPS安全高效搭建个人网站?  历史网站制作软件,华为如何找回被删除的网站?  Java垃圾回收器的方法和原理总结  晋江文学城电脑版官网 晋江文学城网页版直接进入  Laravel怎么多语言本地化设置_Laravel语言包翻译与Locale动态切换【手册】  详解jQuery停止动画——stop()方法的使用  Laravel Livewire是什么_使用Laravel Livewire构建动态前端界面  高防服务器如何保障网站安全无虞?  如何快速打造个性化非模板自助建站?  Laravel怎么实现API接口鉴权_Laravel Sanctum令牌生成与请求验证【教程】  香港服务器网站生成指南:免费资源整合与高速稳定配置方案