lnmp架构拓展及nginx代理
目录
内容概述
1.nginx fastcgi常用模块配置简介
2.拓展web服务器
3.搭建文件共享
4.实现实时备份
5.代理
-5.1 什么是代理?
-5.2 有代理和没有代理的情况
-5.3 nginx代理服务常见的模式
-5.4 nginx代理服务支持的协议
-5.5 代理模块的总结
内容详细
1.nginx fastcgi常用模块配置简介
fastcgi_bind
# 语法: address[transparent]|off
# 指令说明:
设置从指定的本地ip地址及端口号与fastcgi服务器建立连接,指令值可以是变量,当指令参数为transparent 时,允许将客户端的真实ip透传给 FastCGI 服务器,并以客户端真实ip为访问 FastCGI 服务器的源ip,当指令值为 off 时,取消上一层指令域同名指令的配置.
fastegi_buffering
# 语法: on|off
# 默认值 on
# 指令说明:
设置是否启用响应数据缓冲区
fastcgi_buffer_size
# 语法: size
# 默认值: 4k|8k
# 指令说明:
设置用于读取 FastCGI 服务器响应数据第一部分的缓冲区大小,缓冲区的大小为4K或8K
fastcgi_limit_rate
# 语法: rate
# 默认值: 0
# 指令说明:
限制从 FastCGI 服务器读取响应的每个请求的速率.单位是字节/秒,指令值为 0 表示不限制.该指令只在 fastcgi_buffer_ing 启用时有效
fastcgi_request_buffering
# 语法: on 或 off
# 默认值: on
# 指令说明:
设置是否在将请求转发给 FastCGI 服务器之前先从客户端读取整个请求体.当禁用该功能时,如果已经发送请求主体,则无法将请求传递到下一个服务器.
fastcgi_index
# 语法: name
# 指令说明:
设置默认 index 文件
fastcgi_pass_request_body
# 语法: on或off
# 默认值: on
# 指令说明:
设置是否将客户端请求体传递给 FastCGI 服务器
fastcgi_pass_request_headers
# 语法: on 或off
# 默认值: on
# 指令说明:
设置是否将客户端请求头传递给 FastCGI 服务器
fastegi_cache_path
# 语法: path 参数
# 默认值: off
# 指令说明:
设置缓存文件存储路径及参数.缓存数据以 URL 的 MD5 值命名并存储在缓存目录中.
fastcgi_split_path_info
# 语法: regex
# 指令说明:
定义一个正则表达式,可以将 URI 正则匹配赋值到 $fastcgi_script_name 及 $fastcgi_path_info 两个变量中,可用于获取 index.php/arg1/111/arg2/222 格式的请求参数
fastegi_param
# 语法: parameter value[if_not_empty]
# 指令说明:
设置发送请求到 FastCGI 时传递的请求参数.指令值为 if_not_empty 时,表示当传递的参数值不为空时才进行传递
ps:
1.除 fastcgi_cache_path 指令外,FastCGI 模块指令均可编写在 http、server、location 指令域中.
2.fastcgi_cache_purge 指令仅商业版 Nginx 才支持.开源版可通过第三方模块或自己写脚本实现.
3.fastcgi_cache_path 指令只能编写在 http 指令域中.
4.fastcgi_cache 与 fastcgi_store 指令不能在同一指令域中同时使用.
5.non_idempotent 是指 POST、LOCK、PATCH 请求方法的处理.
2.拓展web服务器
实际生产环境中,一台web服务器是肯定不能满足我们的要求的,因此我们需要拓展web服务器(多来几台.)
1.在一台新机器上安装部署nginx
2.统一用户,我们创建www用户
groupadd www -g 666
useradd www -u 666 -g 666 -s /sbin/nologin -M
3.配置域名源,域名安装php
rpm -Uvh https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm
rpm -Uvh https://mirror.webtatic.com/yum/el7/webtatic-release.rpm
yum -y install php72w php72w-cli php72w-common php72w-devel php72w-embedded php72w-gd php72w-mcrypt php72w-mbstring php72w-pdo php72w-xml php72w-fpm php72w-mysqlnd php72w-opcache php72w-pecl-memcached php72w-pecl-redis php72w-pecl-mongodb
4.同步配置文件到新机器上
# 同步nginx的配置文件
scp /etc/nginx/nginx.conf 192.168.174.8:/etc/nginx/
scp /etc/nginx/conf.d/linux.wp.com.conf 192.168.174.8:/etc/nginx/conf.d/
# 同步php的配置文件
scp /etc/php-fpm.d/www.conf 192.168.174.8:/etc/php-fpm.d/
scp /etc/php.ini 192.168.174.8:/etc/
5.启动nginx和phpfuwu
systemctl enable --now nginx php-fpm
6.授权站点目录
chown -R www.www /code/
7.访问测试
3.搭建文件共享
我们在测试中发现,同于个域名,用不同的服务器提供服务时,会出现图片加载不出来的情况,于是我们决定使用nfs进行数据共享.
搭建nfs服务端
yum install -y nfs-utils
1.创建挂载目录
mkdir /web/wp -p
2.配置nfs
vim /etc/exports
/web/wp 192.168.174.0/24(rw,sync,all_squash,anonuid=666,anongid=666)
3.创建用户
groupadd www -g 666
useradd www -u 666 -g 666 -s /sbin/nologin -M
4.授权挂载目录
chown -R www.www /web/
5.启动nfs
systemctl enable --now nfs-server rpcbind
6.检查配置
cat /var/lib/nfs/etab
/web/wp 192.168.174.0/24(rw,sync,wdelay,hide,nocrossmnt,secure,root_squash,all_squash,no_subtree_check,secure_locks,acl,no_pnfs,anonuid=666,anongid=666,sec=sys,rw,secure,root_squash,all_squash)
配置客户端
1.安装nfs和rpcbind
yum install -y nfs-utils rpcbind
2.启动rpcbind
3.查看挂载点
showmount -e 192.168.174.31
Export list for 192.168.174.31:
/web/wp 192.168.174.0/24
4.挂载
mount -t nfs 192.168.174.31:/web/wp /code/wordpress/wp-content
5.查看
df -h
192.168.174.31:/web/wp 50G 2.7G 47G 6% /code/wordpress/wp-content/uploads
4.实现实时备份
1.配置rsync服务端
#!/bin/bash
# 部署rsync服务端
# 这是一个rsync服务端部署脚本
# 判断rsync是否安装,未安装则安装
rpm -q rsync >/dev/null 2>&1
if [ $? -eq 0 ] ; then
echo "rsync已安装."
else
yum install -y rsync >/dev/null 2>&1
fi
# 创建用户
groupadd www -g 666 >/dev/null 2>&1
useradd www -u 666 -g 666 -s /sbin/nologin -M >/dev/null 2>&1
# 创建密码文件
echo "rsync_backup:512501" > /etc/rsync.passwd
chmod 600 /etc/rsync.passwd >/dev/null 2>&1
# 这一步千万不能忘...
# 服务端配置文件修改
cat >/etc/rsyncd.conf <<EOF
uid = www
gid = www
port = 873
fake super = yes
use chroot = no
max connections = 200
timeout = 600
ignore errors
read only = false
list = false
auth users = rsync_backup
secrets file = /etc/rsync.passwd
log file = /var/log/rsyncd.log
#####################################
[web_data]
comment = "这是模块名,同步web01挂载到nfs的目录"
path = /data
EOF
# 创建目录
mkdir /data >/dev/null 2>&1
# 为目录设置用户以及用户组
chown -R www.www /data >/dev/null 2>&1
# 启动服务
systemctl enable --now rsyncd
# 验证服务是否启动
netstat -lntp | grep 873 && ps -ef | grep rsync
if [ $? -eq 0 ] ; then
echo "rsync启动完成!"
fi
systemctl status rsyncd
2.在nfs服务器上后台运行实时同步脚本
#!/bin/bash
# 安装inotify
rpm -q inotify-tools >/dev/null 2>&1
[ $? -eq 0 ] || yum install -y inotify-tools >/dev/null 2>&1 && echo "软件安装完毕"
# 编写实时同步脚本
#!/bin/bash
dir=/data
export RSYNC_PASSWORD=512501
/usr/bin/inotifywait -mrq --format '%w %f' -e create,delete,attrib,close_write $dir | while read line
do
rsync -avz -R --delete $dir/ rsync_backup@172.16.1.21::web_data >/dev/null 2>&1
done &
# 添加开机自启脚本
chmod +x /etc/rc.local
cat >> /etc/rc.local << EOF
sh /root/rsync_inotify.sh
EOF
5.代理
5.1 什么是代理?
生活中我们经常听到代理这个词,比如代理租房,代理收发快递等,代理,一般指找别人帮我们做事.
5.2 有代理和没有代理的情况
没有代理的情况:
客户端直接将请求发给服务端,服务端也直接将请响应返回给客户端
有代理的情况:
为了保证服务端的安全,通常客户端无法直接向服务端发起请求,这时候就需要用到代理服务,实现客户端和服务端的通信.
5.3 nginx代理服务常见的模式
nginx可以作为代理服务,根据应用场景进行总结,代理分为:
正向代理和反向代理
1.正向代理:
类似于VPN,客户端<->代理->服务端
2.反向代理:
一般用于公司集群机构内部,客户端->代理<->服务端
正向代理和反向代理的区别是什么?
# 形式上服务的"对象不一样"
# 正向代理的代理的对象是客户端,为客户端服务
# 反向代理代理的对象是服务端,为服务端服务
5.4 nginx代理服务支持的协议
# nginx可支持的代理协议
HTTP -> *server
Websocket -> Socket server
GRPC -> Grpc server
ICMP\POP\IMAP -> Mail server
HTTPS -> Http server
RTMP -> Media server
# 常见的nginx作为反向代理支持的协议
HTTP -> http_proxy
HTTPS -> fastcgi
-> uwcgi
# 反向代理模式与nignx代理模块
http,websocket,https ngx_http_proxy_module
fastcgi ngx_http_fastcgi_module
uwsgi ngx_http_uwxsgi_module
grpc ngx_http_v2_module
# 常见的nginx作为正向代理支持的协议
http -> http_proxy
nginx正向代理不支持使用https协议
nginx使用http协议作为正向代理的协议
nginx使用正向代理的范围比较窄