在一天内,站点所有的页面被浏览的总次数
大型的标准:最少上百万级别吧
在一天内,有多少个用户访问过我们的网站
大型的标准:10万以上吧,意思是一天有10万人光临你的站点
在一天内,有多少个独立的ip地址来访问我们的网站
如果一个网站的uv,pv,独立ip变大,则会导致高的并发连接,这时要对网站分层布局架构,采用负载均衡。
网站服务器在单位时间内能够处理的最大连接数。
立竿见影,效果非常好,价格非常昂贵,比如F5-BIGIP
nginx就能实现负载均衡,它也是web服务器。
主要有如下三种
负载均衡器把请求轮流转发给后面的web服务器。
同一个地址的客户端,始终请求同一台主机。
负载均衡器把请求给负载最小的哪台服务器。
Nginx 是一个高性能的HTTP服务器,也是一个IMAP/POP3/SMTP邮件服务器,特点是占有内存少,并发能力强
apache:功能完善,历史悠久,模块支持非常丰富,属于重量级产品,比较耗费内存,在并发能力方面没有nginx强。
nginx:省资源,省cpu,所以在高并发时能够处理更多的请求,高端能达到3万到5万的并发量,能做负载均衡
购买F5 BIG-IP ,NetScaler等硬件负载均衡交换机需要10多万甚至几十万人民币。而Nginx为开源软件,可以免费试用,并且可用于商业用途。
wget http://nginx.org/download/nginx-1.18.0.tar.gz
tar zxf nginx-1.18.0.tar.gz
yum -y install pcre pcre-devel openssl openssl-devel zlib zlib-devel
pcre:包括 perl 兼容的正则表达式库
zlib:优化、压缩支持
openssl:支持安全传输协议https(和财务有关系的请求会走的协议)
如果已经安装会提示已经安装过
cd nginx-1.12.2
./configure --prefix=/usr/local/nginx1.18.0 --with-http_ssl_module
make && make install
安装后/usr/local/nginx/
在四个文件夹
conf 配置文件
html 网页文件,网站的根目录,就类似与apache里面的htdocs目录。
logs 日志文件
sbin 主要二进制程序,启动程序命令
查看所有的帮助信息
/usr/local/nginx/sbin/nginx -h
/usr/local/nginx/sbin/nginx
#-c 指定配置文件 如果不加默认加载conf/nginx.conf文件。
/usr/local/nginx/sbin/nginx
测试是否启动成功
lsof -i :80
#或
netstat –tunpl |grep 80
#或
ps aux | grep nginx
/usr/local/nginx/sbin/nginx -s reload
/usr/local/nginx/sbin/nginx -s stop
apache检测配置文件的指令也是httpd.exe -t
/usr/local/nginx/sbin/nginx -t
/usr/local/nginx/sbin/nginx -V
vim /etc/profile
加入
export PATH=/usr/local/nginx1.18.0/sbin:$PATH
source /etc/profile
不要看到别人这样用,你一脸蒙蔽就行了开拓知识点
官网文档
https://www.nginx.com/resources/wiki/start/topics/tutorials/commandline/
kill –INT nginx的主进程号
主进程号查看(实际上nginx专门有个文件用来保存主进程id)的方式
#方式一
ps aux|grep nginx
#方式二
cat /usr/local/nginx/logs/nginx.pid
kill -INT 14952
kill -QUIT nginx的主进程号
kill -QUIT $( cat /usr/local/nginx/logs/nginx.pid )
与nginx –s reload
一样
kill –HUP nginx的主进程号
kill –HUP $( cat /usr/local/nginx/logs/nginx.pid )
与nginx –s reopen
一样
kill –USR1 nginx的主进程号
#不建议使用,一用就自动把nginx.pid文件给删除了
kill –USR1 $( cat /usr/local/nginx/logs/nginx.pid )
注意:重新读日志文件,日志文件改名备份后,使用,否则仍然写入原来的日志文件
如果我把该配置文件改名后然后重新新建一个和原来一样的名称的文件它会把数据写到新的文件中去吗?
此时需要执行:
/usr/local/nginx/sbin/nginx -s reopen
nginx.conf配置文件非常简洁去掉注释和空格大概只有22行左右
egrep -v '#|^$' /usr/local/nginx/conf/nginx.conf
events {
}
http {
server {
}
}
egrep -v '#|^$' nginx.conf.default > nginx.conf
worker_processes 1;
配置工作进程的个数,推荐设置为cpu的个数*核心数。
#error_log logs/error.log;
#error_log logs/error.log notice;
#error_log logs/error.log info;
不同错误信息存储的位置
#pid logs/nginx.pid;
存储nginx进程号的文件
events {
worker_connections 1024;
}
worker_connections 1024:一个进程的最大并发数
根据硬件调整这个值,不要让cup跑100%就行了
并发总数是 worker_processes 和 worker_connections 的乘积
在http段里面的server段就是配置虚拟主机的,http中每一个server段就是一个虚拟主机
http {
include mime.types;
default_type application/octet-stream;
#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 logs/access.log main;
sendfile on;
#tcp_nopush on;
#keepalive_timeout 0;
keepalive_timeout 65;
#gzip on;
server {
listen 80;
server_name localhost;
#charset koi8-r;
#access_log logs/host.access.log main;
location / {
root html;
index index.html index.htm;
}
#error_page 404 /404.html;
# redirect server error pages to the static page /50x.html
#
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
# proxy the PHP scripts to Apache listening on 127.0.0.1:80
#
#location ~ \.php$ {
# proxy_pass http://127.0.0.1;
#}
# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
#
#location ~ \.php$ {
# root html;
# fastcgi_pass 127.0.0.1:9000;
# fastcgi_index index.php;
# fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name;
# include fastcgi_params;
#}
# deny access to .htaccess files, if Apache's document root
# concurs with nginx's one
#
#location ~ /\.ht {
# deny all;
#}
}
# another virtual host using mix of IP-, name-, and port-based configuration
#
#server {
# listen 8000;
# listen somename:8080;
# server_name somename alias another.alias;
# location / {
# root html;
# index index.html index.htm;
# }
#}
# HTTPS server
#
#server {
# listen 443 ssl;
# server_name localhost;
# ssl_certificate cert.pem;
# ssl_certificate_key cert.key;
# ssl_session_cache shared:SSL:1m;
# ssl_session_timeout 5m;
# ssl_ciphers HIGH:!aNULL:!MD5;
# ssl_prefer_server_ciphers on;
# location / {
# root html;
# index index.html index.htm;
# }
#}
}
打开配置文件
vim /usr/local/nginx/conf/nginx.conf
#gzip on;
server {
listen 80;
server_name www.abc.com;
location / {
root abc;
index index.html;
}
}
创建一个和html同等级的目录abc,在abc下创建一个index.html文件
然后重启nginx
/usr/local/nginx/sbin/nginx -s reload
本地windows系统上解析ip
访问www.abc.com,配置成功
步骤其实和上面那个一样,配置文件不一样而已
把上面基于的域名的换成ip地址就行了
#添加一个地址
ip addr add 172.16.0.17/24 dev eth0
#删除一个地址
ip addr del 172.16.0.17 dev eth0
#清空添加的ip地址
ip addr flush dev eth0
解释:上面的24其实就是
255.255.255.0
二进制:11111111.11111111.11111111.00000000 24个1由此而来
注意:ip addr flush dev eth0
这个指令执行后,腾讯云服务器就会失去连接。这个时候不要慌。去腾讯云后台重启一下就又可以了
问题衍生:很多东西是越学越多,知识树就越开枝散叶。
查看ip在windows上是ipconfig linux上是 ip addr
关于ip addr 和 ifconfig
查看原有的ip地址
新增一个ip地址,不要和上面那个重复
然后配置一个虚拟主机
vim /usr/local/nginx/conf/nginx.conf
注意:基于IP的虚拟主机配置在生产环境中不经常使用,一般配置在负载均衡后面的服务器上面,知道即可。
也借鉴了apache的这种包含方法,可以把多个虚拟主机配置成一个个单独的配置文件,仅仅和nginx的主配置文件nginx.conf分离开即可。
mkdir /usr/local/nginx/conf/extra/
vim blog/index.html
重启服务
在linux上访问也需要修改hosts
文件
echo '127.0.0.1 www.blog.com' >> /etc/hosts
curl http://www.blog.com
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
#加载虚拟机住目录里面的虚拟主机
include extra/*.conf;
server {
listen 80;
server_name localhost;
location / {
root html;
index index.html index.htm;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
}
这样就不用一个一个在主配置文件中进行引入了
所谓虚拟主机别名,就是为虚拟主机设置除了主域名以外的一个或多个域名名字,这样就能实现用户访问的多个域名对应同一个虚拟主机网站的功能。
server_name所在行后面添加别名即可
就拿上面的blog来试试。
保存重启nginx,然后把新的域名添加到hosts文件,再次访问
看下面这个图,我想你们肯定都知道是什么意思了
接下来看看输出信息的含义
$remote_addr和$http_x_forwarded_for用于记录IP地址
$remote_user用于记录远程客户端用户名称;
$time_local用于记录访问时间与时区;
$request用于记录请求URL与HTTP协议;
$status用于记录请求状态,例如成功时状态为200,页面找不到时状态为404;
$body_bytes_sent用于记录发送给客户端的文件主体内容大小;
$http_referer用于记录是从哪个页面链接访问过来的;
$http_user_agent用于记录客户端浏览器的相关信息。
Nginx允许针对不同的server做不同的Log
所以我们接下来就做一个基本案例,给上面的blog做一个日志
先去主配置文件定义一个格式,ip地址 请求方式 状态 还有客户端浏览器
log_format mylog '$remote_addr - $request - $status - $http_user_agent';
access_log logs/blog.access.log mylog;
/usr/local/nginx/sbin/nginx -s reload
查看日志文件logs目录多了一个日志文件
然后查看一下内容,就是我们规定好的内容
注意:
$remote_addr
和$http_x_forwarded_for
都用于记录IP地址,区别是什么?
配置负载均衡的时候$remote_addr
是返回反向代理服务器的ip地址。
这时候,就要用log_format 指令来设置日志格式,让日志记录X-Forwarded-For信息中的IP地址,即客户的真实IP
在/date下新建一个目录,写一个脚本文件
#!/bin/bash
logname=/usr/local/nginx/logs/blog.access.log
baklog=/date/$(date -d yesterday +%Y%m%d%H%M).blog.access.log
mv $logname $baklog
touch $logname
/usr/local/nginx/sbin/nginx -s reopen
如果没有安装定时任务,可以使用
yum install -y vixie-cron命令进行安装;
启动定时任务service crond start
查看定时任务crontab -l
编辑定时任务crontab –e
删除定时任务crontab -r
*/1 * * * * sh /date/runlog.sh
分 时 日 月 周 命令
/1:表示每分钟执行一次
0 3 * * * 命令 :表示每天凌晨3点0分执行命令
0 3 * * 1-5 命令 :表示周一到周五凌晨3点0分执行命令
0 3,22 * * * 命令 :表示每天凌晨3点0分和晚上10点0分执行命令
*/1 * * * 命令 :表示每隔1分钟执行一次命令
可能用到的指令,生成的日志太多了,你想批量删除以什么结尾的文件
rm -rf *.access.log
location指令的作用是根据用户请求的URL来执行不同的应用。
大概分为3种
精确匹配
location = patt {
}
一般匹配
location patt{
}
正则匹配
location ~ patt{
}
在linux下面配置的虚拟主机测试时,要在hosts
文件里面做好解析
linux的hosts
文件在/etc/hosts
windows的hosts
文件在C:\Windows\System32\drivers\etc
为什么上面是location这里就开始将curl了呢?,因为下面要用
curl www.blog.com
curl -o blog.txt www.blog.com
#不想保存文件就指定到黑洞里面去
curl -o /dev/null www.blog.com
curl -s -o blog.txt www.blog.com
-i是显示返回头信息和网页内容
-I只显示返回头信息
curl -i www.blog.com
curl -I www.blog.com
多用于测试是否请求成功
输出格式由普通字符串和任意数量的变量组成
输出变量需要按照`%{variable_name}`的格式
%{http_code}表示状态码。
curl -s -o /dev/null -I -w '%{http_code}\n' www.blog.com
书写完匹配规则后测试之前都要重启nginx服务
测试
curl -w '\n' www.blog.com/test
总结:访问的路径中,如果有多个location都符合,则匹配到最长字符串(location)优先;
~ 开头表示区分大小写的正则匹配
~* 开头表示不区分大小写的正则匹配
测试结果
总结:如果常规字符串,与正则都匹配,则优先匹配正则
注意:也可以通过再字符串规则前设置^~ 表示匹配到常规字符串,不做正则匹配检查
下面这个就是默认匹配
location / {
具体配置
}
/为默认匹配,即如果没有匹配上其他的location,则最后匹配‘默认匹配’部分
总结:location的命中过程是这样的;
(1)先判断精准匹配,如果匹配成功,立即返回结果并结束解析过程
(2)判断一般匹配,如果有多个匹配成功,记录下来最长的匹配规则,
(3)继续判断正则匹配,按匹配里的正则表达式顺序为准,由上到下开始匹配,一旦匹配成功一个,立即返回结果,结束解析过程。
注意:一般匹配中,顺序无所谓,是按匹配的场地来确定的;正则匹配中,顺序有所谓,因为是从前向后匹配的。
比如访问
http://www.blog.com/index.html
实际上访问
http://www.blog.com/index.php
Nginx rewrite主要功能是实现URL地址重写,需要PCER的支持,前面已经安装。
几个重要的单词
falg标记符号 | 作用 |
---|---|
last | 本条规则匹配完成后,继续向下匹配新的locationURL规则 |
break | 本条规则匹配完成即终止,不再匹配后面的任何规则 |
redirect | 返回302临时重定向,浏览器地址栏会显示跳转后的URL地址 |
permanent | 返回301永久重定向,浏览器地址栏会显示跳转后的url地址 |
server {
listen 80;
server_name www.blog.com;
location / {
root blog;
index index.html;
}
rewrite ^/index\.php /abc.html last;
}
访问www.blog.com/index.php 则变成访问www.abc.com/index.php
代码
server {
listen 80;
server_name www.blog.com;
location / {
root blog;
index index.html;
}
#rewrite ^/index\.php /abc.html last;
rewrite ^/(.*) http://www.abc.com/$1 break;
#点号,在正则里面表示除了换行符以外的任何字符,
#星号,表示0到多个。
# 使用.*来表示任何字符。
#$1符号,表示前面(.*)里面的内容。
}
注意这里,测试时一定要确保域名都已经在hosts文件中解析过,否则访问不上,hosts文件修改后浏览器要重新打开才会读取新内容
location ~ ^/break {
rewrite ^/break /test break;
}
#当访问 域名/last的时候 重写到/test 此时因为时last所以没有结束,就续向下匹配新的locationURL规则 查找/test的。
location ~ ^/last {
rewrite ^/last /test last;
}
location /test{
root abc;
index 123.html;
}
注意 当访问 域名/test url时,实际上是返回的 abc/test/123.html页面的内容;还有这里一定要留意文件夹的创建,有错的时候可以看一下错误日志
301永久重定向,浏览器会记住,
比如a.com网站 301到 b.com网站,
浏览器中输入a.com时,就不请求a.com了,就直接请求b.com网站了;
302临时重定向,浏览器不记住,
比如a.com网站 302到 b.com网站,
浏览器中输入a.com时,还是请求a.com网站,根据a.com网站响应的location内容,再去请求b.com网站;
#301重定向;
rewrite ^/(.*) http://www.abc.com/$1 permanent;
#302重定向;
rewrite ^/(.*) http://www.abc.com/$1 redirect;
gzip on;
gzip_min_length 1k;
gzip_buffers 4 16k;
gzip_comp_level 6;
gzip_types application/javascript text/css
只需要记住:
gzip_min_length 大于1K才压缩
gzip_comp_level 压缩级别
gzip_types 压缩的类型
注意:text/html
是默认开启的压缩类型,根据网友的统计测试,压缩级别大概超过6几乎就没有区别了,所以我们直接设置为6即可。
1.为什么我们压缩大于1K的文件呢?因为小于1K容易越压缩越大
2.图片,视频等不要压缩,因为不但不会减小,在压缩时消耗cpu和内存资源。图片我们要采取的策略应该在程序上比如裁剪缩略图等
3.总结:只压缩 css和 js是最佳策略
我个人服务器,带宽是3M的,有一个JS是高达2.2M,每次页面一开至少需要5秒平均维持6秒,最高长达7.4秒。
这样一个网站对于用户来说,我觉得不会想访问第二次。
经过gzip压缩后,原本的2.2M 变成了 336KB 原本的响应时间6秒变成了 455ms ,太夸张了。
原本的页面打开需要5-7秒 ,现在只需要1.5秒左右(这是正常的页面打开时间),我个人觉得很好用。
yum list installed | grep mysql
yum remove -y mysql-libs
我们最好保持一致下载5.7.30就行
上方红色的框框复制,然后去镜像网站查找
https://mirrors.tuna.tsinghua.edu.cn/mysql/downloads/MySQL-5.7/
tar xvf mysql-5.7.30-1.el7.x86_64.rpm-bundle.tar
然后卸载自带mariadb.libs
#查看是否有存在
yum list installed | grep mariadb
yum remove mariadb-libs.x86_64
然后就是4个指令,一口气成功,注意要按照这个顺序操作
rpm -ivh mysql-community-common-5.7.30-1.el7.x86_64.rpm
rpm -ivh mysql-community-libs-5.7.30-1.el7.x86_64.rpm
rpm -ivh mysql-community-client-5.7.30-1.el7.x86_64.rpm
rpm -ivh mysql-community-server-5.7.30-1.el7.x86_64.rpm
#centos7
systemctl start mysqld.service
#centos6
service mysqld start
netstat -tpnl | grep 3306
r?k;B=yfk9YL
grep "root@localhost" /var/log/mysqld.log
mysql -uroot -p密码
ALTER USER 'root'@'localhost' IDENTIFIED by 'Root1234*';
密码设置太简单会提示
systemctl start/stop/restart mysqld.service
service mysqld start/stop/restart
/var/lib/mysql
路径在
/etc/my.cnf
init-connect='SET NAMES utf8mb4'
default-storage-engine=INNODB
character-set-server=utf8mb4
[mysql]
default-character-set = utf8mb4
[client]
default-character-set = utf8mb4
systemctl restart mysqld
登录进mysql 再次查看一下字符集是否已经修改完成
show variables like '%char%';
https://www.php.net/downloads.php#gpg-7.4
tar -zxvf php-7.4.10.tar.gz
安装php7.4依赖
yum -y install libxml2-devel openssl-devel libcurl libcurl-devel libpng-devel freetype-devel libxslt-devel sqlite-devel oniguruma-devel libicu libicu-devel libjpeg libjpeg-devel
其中
enable-fpm
是让php作为一个独立服务运行
prefix
编译安装的软件一定不要忘记这个,否则卸载就是麻烦
#切换到解压目录
cd php-7.4.10/
#7.4.10 这个配置是目前几乎所有的项目都够用了,不够再加即可
./configure \
--prefix=/usr/local/php7.4.10 \
--with-config-file-path=/usr/local/php7.4.10/etc \
--with-curl \
--with-freetype \
--with-gettext \
--with-iconv-dir \
--with-kerberos \
--with-mysqli \
--with-openssl \
--with-pdo-mysql \
--with-pear \
--with-xmlrpc \
--with-xsl \
--with-zlib \
--with-zip \
--enable-ftp \
--enable-intl \
--enable-bcmath \
--enable-inline-optimization \
--enable-gd \
--enable-gd-jis-conv \
--enable-mbregex \
--enable-mbstring \
--enable-opcache \
--enable-pcntl \
--enable-shmop \
--enable-soap \
--enable-sockets \
--enable-sysvsem \
--enable-xml \
--enable-fpm
这里提示报错,提示libzip版本太低,怎么办?
解决办法:
https://blog.csdn.net/ljh101/article/details/108531725
接着进行编译(make)和安装(make install 就是安装)
make && make install
注意:重新安装后发现改了配置没有用,需要清理一下以前的缓存
make clean
清除上次的make命令所产生的object文件(后缀为“.o”的文件)及可执行文
make distclean
类似make clean,但同时也将configure生成的文件全部删除掉,包括Makefile文件。
cp php.ini-development /usr/local/php7.4.10/etc/php.ini
cd /usr/local/php7.4.10/etc/
cp php-fpm.conf.default php-fpm.conf
vim php-fpm.conf
找到;pid = run/php-fpm.pid 把前面的;删掉
/usr/local/php7.4.10/etc/php-fpm.conf: 是php服务的主配置文件
/usr/local/php7.4.10/etc/php-fpm.d/www.conf: 是php服务辅助配置文件,需要被上述的php-fpm.conf引入
cd /usr/local/php7.4.10/etc/php-fpm.d
cp www.conf.default www.conf
vim +/date.timezone /usr/local/php7.4.10/etc/php.ini
到这里,已经完全配置完毕,改了配置需要重启服务哦
开启
/usr/local/php7.4.10/sbin/php-fpm
netstat -tpnl | grep 9000
killall /usr/local/php7.4.10/sbin/php-fpm
netstat -tpnl | grep 9000
进入php安装包目录中复制 php-fpm 的启动脚本
cp sapi/fpm/init.d.php-fpm /etc/init.d/php-fpm
增加执行权限
chmod +x /etc/init.d/php-fpm
启动 php-fpm
/etc/init.d/php-fpm start
# 或
service php-fpm start
关闭php-fpm
service php-fpm stop
重启
service php-fpm restart
其实就是centos6的服务器管理
这样在任何地方都可以使用php-fpm
打开
vim /etc/profile
G
直接跳转到最后一行,加入如下内容
export PATH=/usr/local/php7.4.10/sbin:$PATH
export PATH=/usr/local/php7.4.10/bin:$PATH
让环境变量立即生效
source /etc/profile
这样就可以快速通过php-fpm
和php
来执行命令了
注意:php-fpm
是用来控制服务的
官网教程
https://pkg.phpcomposer.com/#how-to-install-composer
这个安装非常简单
切换到php/bin
目录然后依次执行以下三条指令即可
1.下载安装脚本 - composer-setup.php - 到当前目录。
php -r "copy('https://install.phpcomposer.com/installer', 'composer-setup.php');"
2.执行安装过程。
php composer-setup.php
3.删除安装脚本。
php -r "unlink('composer-setup.php');"
4.脚本改名
mv composer.phar composer
现在就已经可以在任意地方使用了,因为php/bin
在上面php安装的时候已经放到环境变量中去了
更改镜像,不改的话天朝无法使用
设置阿里云镜像源
composer config -g repo.packagist composer https://mirrors.aliyun.com/composer/
查看
composer config -gl | grep repositories.packagist.org.url
composer config -g --unset repos.packagist
它是nginx和php连接的桥梁,在较早的nginx版本中,是没有这个文件,需要自己指定的。因为我现在这个是比较新的版本,所有都有了,因此我们不用再配置该文件了
cd /usr/local/nginx1.18.0/conf/
如果你的nginx没有该文件则可以把如下内容写入进去,并命名为fastcgi.conf
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param QUERY_STRING $query_string;
fastcgi_param REQUEST_METHOD $request_method;
fastcgi_param CONTENT_TYPE $content_type;
fastcgi_param CONTENT_LENGTH $content_length;
fastcgi_param SCRIPT_NAME $fastcgi_script_name;
fastcgi_param REQUEST_URI $request_uri;
fastcgi_param DOCUMENT_URI $document_uri;
fastcgi_param DOCUMENT_ROOT $document_root;
fastcgi_param SERVER_PROTOCOL $server_protocol;
fastcgi_param REQUEST_SCHEME $scheme;
fastcgi_param HTTPS $https if_not_empty;
fastcgi_param GATEWAY_INTERFACE CGI/1.1;
fastcgi_param SERVER_SOFTWARE nginx/$nginx_version;
fastcgi_param REMOTE_ADDR $remote_addr;
fastcgi_param REMOTE_PORT $remote_port;
fastcgi_param SERVER_ADDR $server_addr;
fastcgi_param SERVER_PORT $server_port;
fastcgi_param SERVER_NAME $server_name;
# PHP only, required if PHP was built with --enable-force-cgi-redirect
fastcgi_param REDIRECT_STATUS 200;
server{
listen 80;
server_name www.blog.com;
root blog;
location / {
index index.php index.html;
}
location ~ .*\.(php)?$
{
fastcgi_pass 127.0.0.1:9000;
#fastcgi(管理PHP)
fastcgi_index index.php;
#引入上面提到的配置文件
include fastcgi.conf;
}
}
server{
listen 80;
server_name www.tp5.com;
root tp5/public;
location / {
#这一句是伪静态的实现
if (!-e $request_filename){
rewrite ^/(.*)$ /index.php/$1 last;
}
index index.php index.html;
}
location ~ .+\.php($|/) {
set $script $uri;
set $path_info "/";
if ($uri ~ "^(.+\.php)(/.+)") {
set $script $1;
set $path_info $2;
}
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php?IF_REWRITE=1;
include fastcgi.conf;
fastcgi_param PATH_INFO $path_info;
fastcgi_param SCRIPT_FILENAME $document_root/$script;
fastcgi_param SCRIPT_NAME $script;
}
}
这个是我目前在网上找的亲测可用的。用在laravel7中没问题,laravel5或者6应该也没问题
server {
listen 80;
server_name www.blog.com;
root "D:/wamp/WWW/blog/public";
location / {
index index.html index.htm index.php;
try_files $uri $uri/ /index.php?$query_string;
}
location ~ .php$ {
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
}
server{
listen 80;
server_name www.dede.com;
root dede/uploads;
location / {
index index.php index.html;
}
location ~ .*\.(php)?$
{
fastcgi_pass 127.0.0.1:9000;
#fastcgi(管理PHP)
fastcgi_index index.php;
#引入上面提到的配置文件
include fastcgi.conf;
}
}
官网下载
http://www.dedecms.com/
mkdir /usr/local/nginx1.18.0/dede/
cd /usr/local/nginx1.18.0/dede/
#切换到源码存放处
cd /usr/local/src
#下载
wget http://updatenew.dedecms.com/base-v57/package/DedeCMS-V5.7-UTF8-SP2.tar.gz
#解压
tar -zxvf DedeCMS-V5.7-UTF8-SP2.tar.gz
#-r 复制目录 -p保留文件属性
cp -Rp uploads/ /usr/local/nginx1.18.0/dede/
cd /usr/local/nginx1.18.0/dede/
重启服务,并在windows上解析域名www.dede.com
nginx -s reload
cd /usr//local/nginx1.18.0/dede/
chmod o+w ./ -R
server {
listen 81;
server_name www.blog.com;
root 81;
location / {
index index.html;
}
}
#配置连接池
upstream blog{
server xx.xxx.xx.xx:81;
server xx.xxx.xx.xx:82;
}
#绑定域名
server {
listen 80;
server_name www.blog.com;
location / {
proxy_pass http://blog;
proxy_set_header Host $host;
proxy_set_header X-Peal-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
server指令:
语法:server name [参数]
使用环境:upstream
该指令用于指定后端服务器的名称和参数。服务器的名称可以是一个域名,-个ip地址,端口号。
在后端服务器名称之后,可以跟以下参数:
weight=number 设置服务器的权重,权重数值越高,被分配到的客户端请求数越多。
如果没有设置权重,则为默认权重为1.
upstream 连接池名称{
server 192.168.0.100 weight=5;
server 192.168.0.200 weight=1;
server 192.168.0.210 weight=3;
}
max_fails=number 在参数fail_timeout指定的时间内对后端服务器请求失败的次数,如果检测到后端服务器无法连接及发生服务器错误(404错误除外),则标记为失败。如果没有设置,则为默认值1。设为数值0将关闭这项检查。
fail_timeout=time(30s)在经历参数max_fails设置的失败次数后,暂停的世界。
down 标记服务器为永久离线状态,用于ip_hash指令。
backup 仅仅在非backup服务器全部宕机或繁忙的时候,才启用。
TODO:晚点来完善这个教程
其实和linux上是一样的,官网就有提供windows版本
这里提一下,如何和php整合
NGINX运行PHP需要运行NGINX和FASTCGI+php