Nginx反向代理和负载均衡v13.docx
《Nginx反向代理和负载均衡v13.docx》由会员分享,可在线阅读,更多相关《Nginx反向代理和负载均衡v13.docx(23页珍藏版)》请在冰点文库上搜索。
![Nginx反向代理和负载均衡v13.docx](https://file1.bingdoc.com/fileroot1/2023-7/14/a683f211-5278-4201-96af-eb3e6cbb39c5/a683f211-5278-4201-96af-eb3e6cbb39c51.gif)
Nginx反向代理和负载均衡v13
Nginx反向代理和负载均衡
安装文档
Nginx反向代理和负载均衡1
1.系统环境3
2.总体结构3
3.安装过程3
3.1.安装准备3
3.2.安装软件4
3.2.1.设置本地yum源4
3.2.2.安装前提5
3.2.3.安装Nginx5
3.2.3.1.创建运行用户、组nginx5
3.2.3.2.复制文件并安装nginx5
3.2.3.3.修改Linux文件数限制6
3.2.3.4.etc/sysconfig/iptables[修改防火墙配置]6
3.2.3.5.etc/init.d/nginx[编写nginx启动脚本]7
3.2.3.6.设置开机启动nginx8
3.2.3.7.启动nginx8
3.2.3.8.停止nginx8
3.2.4.配置Nginx9
3.2.4.1.usr/local/nginx/nginx.conf9
3.2.4.2.配置反向代理和负载均衡web服务器模板10
3.2.5.优化linux内核参数12
3.3.测试结果14
3.4.附录14
1.系统环境
IP:
10.19.110.247[Nginx-FX-WEB1]
OS:
CentOSrekease6.6(Final)amd64,
Mem:
4G,
CPU:
4,
/dev/sda140G/data,
/dev/xvda1488M/boot,
/dev/xvda235G/,
tmpfs1.9G/dev/shm
IP:
10.19.110.248[Nginx-FX-WEB2]
OS:
CentOSrekease6.6(Final)amd64,
Mem:
8G,
CPU:
4,
/dev/sda140G/data,
/dev/xvda1488M/boot,
/dev/xvda235G/,
tmpfs1.9G/dev/shm
IP:
10.19.251.105[JK-CL-FW]
OS:
CentOSrelease6.5(Final)
Mem:
3G,
CPU:
4,
/dev/sda589G4.1G80G5%/
tmpfs2.0G72K2.0G1%/dev/shm
/dev/sda1194M34M151M19%/boot
/dev/sda229G172M28G1%/home
/dev/sdb150G214M47G1%/usr/local
/dev/sdb250G4.5G43G10%/data
2.总体结构
略
3.安装过程
3.1.安装准备
1.挂载磁盘
#fdisk/dev/sdb
参考:
附录6
P2178.3.1节,磁盘分区:
fdisk;[]
P2238.3.2节,磁盘格式化;[mkfs-text3/dev/sdb1]
P2258.3.3节,磁盘检验:
fsck,badblocks;[fsck-C-f-text3/dev/sdb1]
P2268.3.4节,磁盘挂载与卸载;[mount/dev/sdb1/usr/local]
复制安装文件到/data并解压到/usr/local/src
Nginx:
nginx-1.6.2.tar.gz,nginx-1.6.2.tar.gz.asc,nginx_tcp_proxy_module-master.zip
JDK:
系统安装时自带
#java-version
javaversion"1.7.0_45"
OpenJDKRuntimeEnvironment(rhel-2.4.3.3.el6-x86_64u45-b15)
OpenJDK64-BitServerVM(build24.45-b08,mixedmode)
3.2.安装软件
3.2.1.设置本地yum源
Ø复制系统安装ISO到/data目录[CentOS-6.6-x86_64-bin-DVD1.iso]
Ø挂载ISO文件
mkdir/media/CentOS
mount-tiso9660-oloop /data/CentOS-6.6-x86_64-bin-DVD1.iso/media/CentOS
df-h
FilesystemSizeUsedAvailUse%Mountedon
/dev/sda589G4.1G80G5%/
tmpfs2.0G72K2.0G1%/dev/shm
/dev/sda1194M34M151M19%/boot
/dev/sda229G172M28G1%/home
/dev/sdb150G214M47G1%/usr/local
/dev/sdb250G4.5G43G10%/data
/data/CentOS-6.6-x86_64-bin-DVD1.iso4.4G4.4G0100%/media/CentOS
已经挂载成功
Ø 修改CentOS-Media.repo
vim/etc/yum.repos.d/CentOS-Media.repo
原始文件如下,注释不是原文件内容:
[c6-media]
name=CentOS-$releasever-Media #自定义名称
baseurl=file:
///media/CentOS/
file:
///media/cdrom/
file:
///media/cdrecorder/#如果不修改,可以将ISO文件挂载到/media/CentOS路径下,我选择不修改;如果修改,可以添加自己设置的挂载路径,如file:
///mnt/cdrom/
gpgcheck=1
enabled=1#启用yum源,0为不启用,1为启,这里要用到本地源,所以为1
gpgkey=file:
///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6
Ø清除yum缓存
# yumcleanall
3.2.2.安装前提
参考附录2{《深入理解Nginx模块开发与架构解析》第25页1.3.2使用Nginx的必备软件}一节内容
Ø安装gcc-c++
GNU编译器套件(GNUCompilerCollection)包括C、C++、Objective-C、Fortran、Java、Ada和Go语言的前端,也包括了这些语言的库(如libstdc++、libgcj等等)
sudoyum-y--disablerepo=*--enablerepo=c6-mediainstallgcc-c++
注:
查看是否安装gcc使用以下命令
gcc–v
rpm-qa|grepgcc
Ø安装
openssl-devel:
pcre-devel:
添加对rewrite的支持,编译参数中启用了对utf8字符的支持,以便nginx支持中文的正则表达式
zlib-devel:
sudoyum-y--disablerepo=*--enablerepo=c6-mediainstallzlibzlib-devel
sudoyum-y--disablerepo=*--enablerepo=c6-mediainstallopensslopenssl-devel
sudoyum-y--disablerepo=*--enablerepo=c6-mediainstallpcrepcre-devel
3.2.3.安装Nginx
3.2.3.1.创建运行用户、组nginx
Nginx服务程序默认以nobody身份运行,建议为其创建专门的用户账号,以便更准确地控制其访问权限,增加灵活性、降低安全风险。
如:
创建一个名为nginx的用户,不建立宿主目录,也禁止登录到shell环境。
useradd-M-s/sbin/nologinnginx
3.2.3.2.复制文件并安装nginx
将安装包文件上传到/usr/local中
/usr/local
/nginx-1.6.2.tar.gz
然后执行:
cd/usr/local
tar-zxv-fnginx-1.6.2.tar.gz
rm-rfnginx-1.6.2.tar.gz
mvnginx-1.6.2nginx
cd/usr/local/nginx
./configure--prefix=/usr/local/nginx--user=nginx--group=nginx--conf-path=/usr/local/nginx/nginx.conf--with-http_stub_status_module--with-http_ssl_module--with-http_addition_module--with-http_realip_module--with-http_sub_module--with-http_gzip_static_module--with-debug--with-cc-opt='-g-O0'
makeCFLAGS="-g-O0"
makeinstall
configure运行结果
{
Configurationsummary
+usingsystemPCRElibrary
+usingsystemOpenSSLlibrary
+md5:
usingOpenSSLlibrary
+sha1:
usingOpenSSLlibrary
+usingsystemzliblibrary
nginxpathprefix:
"/usr/local/nginx"
nginxbinaryfile:
"/usr/local/nginx/sbin/nginx"
nginxconfigurationprefix:
"/usr/local/nginx"
nginxconfigurationfile:
"/usr/local/nginx/nginx.conf"
nginxpidfile:
"/usr/local/nginx/logs/nginx.pid"
nginxerrorlogfile:
"/usr/local/nginx/logs/error.log"
nginxhttpaccesslogfile:
"/usr/local/nginx/logs/access.log"
nginxhttpclientrequestbodytemporaryfiles:
"client_body_temp"
nginxhttpproxytemporaryfiles:
"proxy_temp"
nginxhttpfastcgitemporaryfiles:
"fastcgi_temp"
nginxhttpuwsgitemporaryfiles:
"uwsgi_temp"
nginxhttpscgitemporaryfiles:
"scgi_temp"
}
注:
配置前可以参考:
./configure--help给出说明#
(1)
参考附录2{《深入理解Nginx模块开发与架构解析》第30页1.5.1configure的命令参数[p35表1-11]}一节内容
--prefix=/usr/local/nginx:
设定Nginx的安装目录
--user和—group:
指定Nginx运行用户和组
--conf-path=/usr/local/nginx/nginx.conf:
配置文件放置路径
--with-http_stub_status_module:
启用http_stub_status_module模块以支持状态统计
--with-http_ssl_module:
支持SSL协议
--with-http_addition_module:
在返回客户端的HTTP包体头部或者尾部增加内容
--with-http_realip_module:
从客户端请求里的header信息(如X-Real-IP\X-Forwarded-For)中获取真正的客户端IP地址
--with-http_sub_module:
在返回客户端的HTTP响应包中将指定的字符串替换为自己需要的字符串
例如:
在HTML的返回中,将替换为
--with-http_gzip_static_module:
启用静态压缩
--with-debug:
启用调试
参考附录1{《深入剖析Nginx》第10页2.1.1绑定Nginx到gdb}一节内容
用于绑定Nginx到gdb的参数:
--with-cc-opt='-g-O0'
makeCFLAGS="-g-O0"
****为了服务器的安全性,修改nginx名称和版本号
cd/usr/local/src/nginx/src/core
vimnginx.h
修改其中的两个宏定义为
#defineNGINX_VERSION"0.0.0"
#defineNGINX_VER"T.G.CloudX/"NGINX_VERSION
保存退出
3.2.3.3.修改Linux文件数限制
系统默认值为1024{进程的最大连接数受Linux系统进程的最大打开文件数限制}
用于配合Nginx配置中的[worker_connections65535]
{用于定义Nginx每个进程的最大连接数,默认是1024.最大客户端连接数由worker_processes和worker_connections决定,即Max_client=worker_processes*worker_connections,
在作为反向代理时,max_clients变为:
max_clients=worker_processes*worker_connections/4}
ulimit-n65535
3.2.3.4./etc/sysconfig/iptables[修改防火墙配置]
vim/etc/sysconfig/iptables
#添加配置项 【注意,此处配置一定要放在22端口的下一行】
80端口是在10.19.110.248机器上打开
iptables -L -n--line-number
iptables-DINPUT5#此句删除REJECT行
serviceiptablessave
iptables-AINPUT-mstate--stateNEW-mtcp-ptcp--dport80-jACCEPT
iptables-AINPUT-jREJECT--reject-withicmp-host-prohibited
serviceiptablessave
#配置结果如下
#Generatedbyiptables-savev1.4.7onxxx
*filter
:
INPUTACCEPT[0:
0]
:
FORWARDACCEPT[0:
0]
:
OUTPUTACCEPT[2:
328]
-AINPUT-mstate--stateRELATED,ESTABLISHED-jACCEPT
-AINPUT-picmp-jACCEPT
-AINPUT-ilo-jACCEPT
-AINPUT-ptcp-mstate--stateNEW-mtcp--dport22-jACCEPT
-AINPUT-ptcp-mstate--stateNEW-mtcp--dport80-jACCEPT
-AINPUT-jREJECT--reject-withicmp-host-prohibited
-AFORWARD-jREJECT--reject-withicmp-host-prohibited
COMMIT
#Completedon
#重启防火墙
serviceiptablesrestart
chkconfigiptablesonxxx
允许80端口的访问
用chkconfigiptableson实现开机启动启用
3.2.3.5./etc/init.d/nginx[编写nginx启动脚本]
为了使Nginx服务的启动、停止、重载等操作更加方便,可以编写Nginx服务脚本,并使用chkconfig和service工具来进行管理
vim/etc/init.d/nginx
#!
/bin/bash
#nginxStartupscriptfortheNginxHTTPServer
#itisv.0.0.2version.byandy_linky@
#chkconfig:
-8515
#description:
Nginxisahigh-performancewebandproxyserver.
#Ithasalotoffeatures,butit'snotforeveryone.
#processname:
nginx
#pidfile:
/var/run/nginx.pid
#config:
/usr/local/nginx/nginx.conf
nginxd=/usr/local/nginx/sbin/nginx
nginx_config=/usr/local/nginx/nginx.conf
nginx_pid=/usr/local/nginx/logs/nginx.pid
RETVAL=0
prog="nginx"
#Sourcefunctionlibrary.
./etc/rc.d/init.d/functions
#Sourcenetworkingconfiguration.
./etc/sysconfig/network
#Checkthatnetworkingisup.
[${NETWORKING}="no"]&&exit0
[-x$nginxd]||exit0
#Startnginxdaemonsfunctions.
start(){
if[-e$nginx_pid];then
echo"nginxalreadyrunning...."
exit1
fi
echo-n$"Starting$prog:
"
daemon$nginxd-c${nginx_config}
RETVAL=$?
echo
[$RETVAL=0]&&touch/var/lock/subsys/nginx
return$RETVAL
}
#Stopnginxdaemonsfunctions.
stop(){
echo-n$"Stopping$prog:
"
killproc$nginxd
RETVAL=$?
echo
[$RETVAL=0]&&rm-f/var/lock/subsys/nginx/usr/local/nginx/logs/nginx.pid
}
#reloadnginxservicefunctions.
reload(){
echo-n$"Reloading$prog:
"
#kill-HUP`cat${nginx_pid}`
killproc$nginxd-HUP
RETVAL=$?
echo
}
#Seehowwewerecalled.
case"$1"in
start)
start
;;
stop)
stop
;;
reload)
reload
;;
restart)
stop
start
;;
status)
status$prog
RETVAL=$?
;;
*)
echo$"Usage:
$prog{start|stop|restart|reload|status|help}"
exit1
esac
exit$RETVAL
chmod+x/etc/init.d/nginx
chkconfig--addnginx
3.2.3.6.设置开机启动nginx
vi/etc/rc.local
在文件最后加一行如下内容,保存并退出,下次重启会生效。
/etc/init.d/nginxstart
3.2.3.7.启动nginx
确保系统的 80 端口没被其他程序占用,
/usr/local/nginx/sbin/nginx
servicenginxrestart
检查是否启动成功:
lsof-i:
80
查看80端口现在运行的情况
netstat-anpt|grepnginx
查看nginx服务是否启动
tcp000.0.0.0:
800.0.0.0:
*LISTEN8481/nginx
8481是pid号
3.2.3.8.停止nginx
killall-9nginx
killall-HUPnginx
servicenginxstop
servicenginxrestart
servicenginxreload
PID号默认存放在logs/目录下的nginx.pid文件中,因此若改用kill命令,也可以根据nginx.pid文件中的PID号来进行控制
3.2.4.配置Nginx
3.2.4.1./usr/local/nginx/nginx.conf
vim/usr/local/nginx/conf/nginx.conf
参考附录2P52-2.3Nginx服务的基本配置一节内容
#daemonoff;
#nginx运行用户和组
user nginxnginx;
#启动进程,通常设置成和cpu的数量相等参考附录2P56-2.3.3节
worker_processes 4;
worker_cpu_affinity1000010000100001;
worker_rlimit_nofile65535;
#全局错误日志及PID文件
pid/var/run/nginx.pid;
error_log logs/error.log;
events{
#epoll是多路复用IO(