Nginx设计架构图:
2、安装
2.1 Nginx依赖关系
yum install -y openssl-devel pcre-devel libevent
2.2 安装nginx依赖pcre库,使Nginx支持HTTP Rewrite模块
tar xf pcre-VERSION.tar.gz
cd pcre-VERSION
./configure
make && make install
2.3 Nginx编译安装
# 添加Nginx系统用户
useradd -r -s /sbin/nologin -M nginx
tar xf nginx-1.6.2.tar.gz
cd nginx-1.6.2
./configure \
--prefix=/usr/local/nginx \
--conf-path=/etc/nginx/nginx.conf \
--error-log-path=/var/log/nginx/error.log \
--http-log-path=/var/log/nginx/access.log \
--pid-path=/var/run/nginx/nginx.pid \
--lock-path=/var/lock/nginx.lock \
--user=nginx \
--group=nginx \
--with-http_ssl_module \
--with-http_stub_status_module \
--with-http_gzip_static_module \
--http-client-body-temp-path=/var/tmp/nginx/client \
--http-proxy-temp-path=/var/tmp/nginx/proxy \
--http-fastcgi-temp-path=/var/tmp/nginx/fcgi \
--http-uwsgi-temp-path=/var/tmp/nginx/uwsgi \
--http-scgi-temp-path=/var/tmp/nginx/scgi \
--with-pcre
make && make install
# Nginx PATH环境变量
echo 'export PATH=/usr/local/nginx/sbin:$PATH' > /etc/profile.d/nginx.sh
. /etc/profile.d/nginx.sh
3、配置
3.1 Nginx配置文件结构:
3.2 配置文件详解
3.3 日常维护技巧
配置正确性检查
nginx启动、关闭、重启
3.4 开启目录浏览功能
例如:
localtion /soft {
# 开启Nginx目录浏览功能
autoindex on;
# 文件大小从KB开始显示
autoindex_exact_size off;
# 显示文件修改时间为服务器本地时间
autoindex_localtime on;
}
4、nginx常用功能
反向代理
1、多域名跳转应用实例
2、Nginx重定向实现新旧域名过渡
rewrite
if ($host != 'www.sharelinux.cn') {
rewrite ^/(.*)$ http://www.sharelinux.com/$1permanent;
}
3、alias 和root 区别 举例说明
4、Location命令应用配置
=
/
^~
~*
匹配模式、匹配优先级举例
URL重写
1、if命令
2、rewrite命令
3、set命令
4、break命令
模块
5、案例:web缓存服务器
nginx_ngx_cache-2.1.tar.gz
--add-module
6、案例:负载均衡器
负载均衡算法
轮询、weight、ip_hash、fair、url_hash、
HTTP Upstream
down、backup、max_fails、fail_timeout
调度器算法为ip_hash时,后端服务器在负载均衡器调度中的状态不能是weight、backup
upstream myserver{
server 192.168.1.11:80 weight=3 max_fails=3 fail_timeout=20s;
server 192.168.1.12:80 weight=1 max_fails=3 fail_timeout=20s;
server 192.168.1.13:80 weight=4 max_fails=3 fail_timeout=20s;
}
location / {
proxy_pass http://myserver;
proxy_next_upstream http_500 http_502 http_503 error timeout invalid_header;
include conf/proxy.conf;
}
proxy_next_upstream 参数定义故障转移策略,当后端服务器节点返回500,、502、503、504、和执行超时等错误时,自动将请求转发到upstream负载均衡组中的另一台服务器,实现故障转移。
7、nginx性能优化技巧
1、减小编译后的文件大小
关闭debug模式
2、为特定CPU指定CPU类型编译优化
在编译Nginx时,默认的FCC编译参数是"-o",要优化GCC编译,可以使用以下两个参数
--with-cc-opt='-O3'
--with-cpu-opt=CPU
# 为特定的CPU编译,有效的值包括:
# pentium、pentiumpro、pentium3、pentium4、athlon、opteron、amd64、sparc32、sparc64、ppc64
确定CPU类型:cat /proc/cpuinfo |grep "model name"
3、TCMalloc优化Nginx的性能 (Thread-Caching Malloc)
开源工具 google-perftools
与标准的glibc库的malloc相比,TCMalloc库在内存分配效率和速度上要高很多,这在很大程度上提高了服务器在高并发情况向的性能,从而减低系统负载。为Nginx添加TCMalloc库支持。
安装TCMalloc库,需要安装libunwind(32位操作系统不需要安装)和google-perftools两个软件包,libunwind库为基于64位CPU和操作系统的程序提供了基本函数调用链和函数调用寄存器功能。
3.1、按libunwind库
下载:http://download.savannah.gnu.org/releases/libunwind/
http://download.savannah.gnu.org/releases/libunwind/libunwind-1.1.tar.gz
tar xf libunwind-1.1.tar.gz
cd libunwind-1.1
CFLAGS=-fPIC ./configure
make CFLAGS=-fPIC
make CFLAGS=-fPIC install
3.2、google-perftools
https://code.google.com/p/gperftools/
https://googledrive.com/host/0B6NtGsLhIcf7MWxMMF9JdTN3UVk/gperftools-2.2.tar.gz
tar xf gperftools-2.2.tar.gz
cd gperftools-2.2
./configure
make && make install
echo '/usr/local/lib'/etc/ld.so.conf.d/usr_local_lib.conf
ldconfig
3.3、重新编译Nginx,在编译安装过程中添加"--with-google_perftools_module"选项重新编译Nginx
./configure --prefix=/usr/local/nginx --with-google_perftools_module --with-http_stub_status_module
make && make install
3.4、为google-perftools添加线程目录
mkdir -p /tmp/tcmalloc
chmod 0777 /tmp/tcmalloc
3.5、修改Nginx主配置文件,在pid这一行添加如下代码:
# pid logs/nginx.pid;
google_perftools_profiles /tmp/tcmalloc;
3.6、验证运行状态
lsof -n | grep tcmall
4、Nginx内核参数优化
net.ipv4.tcp_max_tw_buckets = 6000
net.ipv4.tcp.ip_local_port_range = 1024 65000
net.ipv4.tcp_tw_recycle = 1
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_syncookies = 1
net.core.somaxconn = 262144
net.core.netudv_max_backlog = 262144
net.ipv4.tcp_max_orphans = 262144
net.ipv4.tcp_max_syn_backlog = 262144
net.ipv4.tcp_synack_retries = 1
net.ipv4.tcp_syn_retries = 1
net.ipv4.tcp_fin_timeout = 1
net.ipv4.tcp_keepalive_time = 30