首页
学
【学】PHP
【学】前端
【学】Linux
【学】杂学
【学】支付
【学】Docker
享
【享】文件
【享】工具
日记
Me
【Me】我
【Me】留言
老郭博客-程序员客栈
文章模型
下载模型
首页
学
【学】PHP
【学】前端
【学】Linux
【学】杂学
【学】支付
【学】Docker
享
【享】文件
【享】工具
日记
Me
【Me】我
【Me】留言
首页
学
【学】Linux
Nginx-一个IP配置多个站点(无域名)
Nginx-一个IP配置多个站点(无域名)
发布时间:
2年前
作者:
老郭
热度:
3269 ℃
评论数:
#前言: 本篇文章是基于centos7+nginx的配置环境,具体Nginx安装步骤,请移步[Centos7.3搭建LNMP](https://www.phpsix.com/word/rZW0axym.html "Centos7.3搭建LNMP") #介绍 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上配置多个站点。那么首先,我们需要先创建几个文件夹,然后作为我们的多个站点。 ### 1、站点准备 在`home/www`目录下创建两个文件夹,一个是`blog`,一个是`forum`,然后里面分别放一个`index.php`,注意内容可以良好的区分就可以了。  ### 2、添加配置文件 刚才我们也了解到,有多个站点的话其实就是多个Server节点,在`nginx.conf`中通过`include /etc/nginx/conf.d/*.conf`来引入到了http节点,所以我们只需要在`/etc/nginx/conf.d/`目录下创建我们特定于某个站点所需要的配置文件就可以了。 >注意: 注意后缀名为.conf,不然按照include的规则,无法正确引入相关的配置文件。 你也可以像我这么做,如下:  左侧的`fastcgi_param SCRIPT_FILENAME` 写错了,应该是`$document_root`,图片上没改过来,这点明确一下就可以了。 添加完配置文件之后就可以,重启Nginx了。在CentOS上重启的命令如下: ```shell systemctl restart nginx ``` 如果你的是Debian系的Linux的话,也可以使用: ```shell service nginx restart ``` 这时,可以通过浏览器访问,看看我们的配置项到底成功了没有。  这样就成功的在一个IP上通过端口不同,配置了多个站点了。 # 疑难杂项 ### fastcgi_pass 在Server节点的location内部,有这么一个配置项。很是让人摸不着头脑。 ```shell 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的配置。有下面两种方式: ● 方式一: ```shell php-fpm.conf: listen = 127.0.0.1:9000 nginx.conf:fastcgi_pass 127.0.0.1:9000 ``` ● 方式二: ```shell 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`的相关项保持一致就好了。 ### 502 Bad GateWay 前几天Nginx还工作的好好的,不知道为啥,这周一一上班就出现了这个问题。 查看下Nginx的错误日志:`tail -f /var/log/nginx/error.log` 结果发现了下面的内容: `FastCGI send in stderr: "Primary script unknown" while reading response header from upstream...` 网上大部分对此的解释是: nginx.conf 配置文件中`fastcgi_param` 中/script的问题,改成$document_root就好了。 我也照着改了下,发现还是不行,突然想到上周五修改了目录权限,去掉了写权限,会不会是这个问题呢,然后就抱着试一试的态度,执行了下面的命令: `chmod -R 775 target/path` 然后就重启了下Nginx,惊讶的发现问题解决了。 真的是很无语的一个问题,所以下次再出现502的错误时,就多了一个参考的错误修复选项了。
Linux,Centos7,Nginx,IP,站点
上一篇:
Centos 6.x 或 7.x yum安装php5.6.X(最新版)
下一篇:
Centos7使用FireWall开放8888端口
栏目导航
【学】PHP
【学】前端
【学】Linux
【学】杂学
【学】支付
【学】Docker
相关文章
Centos7中 ntp 定时时间同步
3426 ℃
Centos7搭建LAMP
1024 ℃
Centos7搭建Git及安装使用
1370 ℃
Centos7搭建JDK+Tomcat
1009 ℃
Centos7安装Redis
1204 ℃
Centos7.3搭建LNMP
1709 ℃
Centos7.3搭建LNMP(文章二)
1476 ℃
Centos7搭建SVN服务器
1831 ℃
Centos 6.x 或 7.x yum安装php5.6.X(最新版)
1320 ℃
Nginx-一个IP配置多个站点(无域名)
3269 ℃
Centos7使用FireWall开放8888端口
1846 ℃
Centos7.4编译安装Nginx_1.13.8、php_7.2.1、mysql_5....
1074 ℃
Cenots7下添加Php的Redis扩展
1073 ℃
Redis引起的删库跑路加勒索事件
3120 ℃
创业耗费百万,为何DDoS如此要命Part 1
1901 ℃
记一次被黑后的经历
3071 ℃
(最新)CentOS7.4搭建LN(1.14.0)M(MariaDB)P(7....
2703 ℃
微信小程序
手机扫码访问