Nginx快速入门菜鸟笔记
Posted BestYunYan[云燕]
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Nginx快速入门菜鸟笔记相关的知识,希望对你有一定的参考价值。
Nginx
1.编译安装nginx
编译安装nginx 必须先安装pcre库。
(1)uname -a 确定环境
Linux localhost.localdomain 2.6.32-431.el6.x86_64 #1 SMP Fri Nov 22 03:15:09 UTC 2013 x86_64 x86_64 x86_64 GNU/Linux
(2)yum install -y pcre pcre-devel -y 必须安装pcre库(实现nginx rewrite模块功能 rewrite企业必须用到的)
yum install -y openssl openssl-devel(安装openssl-devel模块)
(3)检查安装结果
rpm -qa pcre pcre-devel
pcre-7.8-7.el6.x86_64
pcre-devel-7.8-7.el6.x86_64
rpm -qa openssl openssl-devel
openssl-devel-1.0.1e-15.el6.x86_64
openssl-1.0.1e-15.el6.x86_64
(4)下载nginx
cd /usr/local/src/
wget http://nginx.org/download/nginx-1.4.4.tar.gz
tar -xvzf nginx-1.4.4.tar.gz
cd nginx-1.4.4
(5)安装Nginx
这里nginx安装路径统一安装在/usr/local/nginx下
创建nginx 用户及组
useradd -s /sbin/nologin -M
./configure \\
--prefix=/usr/local/nginx \\
--user=nginx \\
--group=nginx \\
--with-http_realip_module \\
--with-http_sub_module \\
--with-http_gzip_static_module \\
--with-http_stub_status_module \\
--with-pcre
make && make install
解释:prefix 指定安装路径
--user=nginx 进程用户权限
--group=nginx 进程用户组权限
--with(安装各种模块)如:--with-http_stub_status_module enable ngx_http_stub_status_module\\ 安装模块并计划nginx状态信息。
检查配置语法:
/usr/local/nginx/sbin/nginx -t
nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful
启用nginx
/usr/local/nginx/sbin/nginx
检查启动
netstat -lnt|grep 80
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN
pgrep nginx
54470
54471
lsof -i:80
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
clock-app 2768 root 21u IPv4 72431 0t0 TCP 192.168.1.105:53173->111.108.54.43:http (ESTABLISHED)
nginx 54470 root 6u IPv4 62562 0t0 TCP *:http (LISTEN)
nginx 54471 nginx 6u IPv4 62562 0t0 TCP *:http (LISTEN)
ps -aux|grep nginx
Warning: bad syntax, perhaps a bogus \'-\'? See /usr/share/doc/procps-3.2.8/FAQ
root 54470 0.0 0.0 24264 788 ? Ss 11:33 0:00 nginx: master process /usr/local/nginx/sbin/nginx
nginx 54471 0.0 0.1 24664 1344 ? S 11:33 0:00 nginx: worker process
root 57878 0.0 0.0 103260 848 pts/1 S+ 11:39 0:00 grep nginx
检查启动效果
cur 127.0.0.1
或者浏览器直接访问查看效果或者用wget也可以:wget 127.0.0.1
nginx启动报错简单问题汇总
(1)nginx:[emerg]getpwnam(“nginx”)failed
没有创建nginx服务用户导致,useradd nginx -s /sbin/nologin -M即可。
(2)编译安装pcre 时gcc不全导致报错,提示yum源不存在这个作为补充。
如:make && make install
make [1]*** [pcrecpp.lo]错误
make [1] leaving directoy `home/gilin/tools/pcre-8.30`
执行:yum install -y gcc-c++ 即可解决
(3)如何查看nginx编译时的参数
/usr/local/nginx/sbin/nginx -V
(4)浏览器 wget 或curl等软件访问不到页面
*服务器端检查selinux iptables 及端口 进程(netstat -lnt|grep 80,ps -aux|grep nginx),查看nginx日志cat /usr/local/nginx/logs/error.log *后查看客户端:ping,telnet 192.168.1.105 80排除防火墙影响。 在测试curl/wget测试
2.Nginx常用模块说明:(后续补充)
Nginx核心模块为:ngx_http_core_module 负责nginx的全局引用,如主配置文件中的main区域events.
Nginx标准模块集合 不是nginx所必须的但是很常用,因此绝大部分nginx已经默认安装。不建议改动,生成环境中,配置,调整,优化主要是根据nginx这些模块进行修改相应的参数来实现的。常见的nginx 模块
查看nginx目录结构
tree /usr/local/nginx/
nginx主要文件目录说明:
html目录:默认站点目录
50x.html 错误页面(会调用错误日志内容)
Index.html nginx默认首页。
logs 日志文件目录
Access.log 访问nginx默认日志存放文件。是查看访问情况可用tail -f access.log
Error.log nginx 错入日志文件
Nginx.pid nginx的pid文件 当nginx启动后会将进程pid写入此文件。
sbin目录:nginx命令目录
-- nginx nignx的启动
Nginx主配置文件说明:http://www.ha97.com/5194.html
worker_processes 1;
error_log logs/error.log;
pid logs/nginx.pid;
#以上三行为main区,nginx核心功能模块
events {
worker_connections 1024;
}
#events区域,nginx核心功能模块;
#一下是http区开始,http区包括server多个,server区又可以包括多个location区
Nginx默认配置文件:nginx.conf.下面对nginx主默认配置文件nginx.conf.default.进行配置。
1.去掉包含#和空行的内容
egrep -v "#|^$" nginx.conf.default
vim nginx.conf.default
worker_processes 1;
#nginx进程数,建议设置为等于CPU总核心数。
events {
#事件区域块开始
worker_connections 1024;
#单个进程最大连接数(最大连接数=连接数*进程数
}
#设定http服务器
http {
include mime.types;
#nginx支持的媒体类型文件
default_type application/octet-stream;
#默认的媒体类型
sendfile on;
#开启高效文件传输模式
keepalive_timeout 65;
#长连接超时时间,单位是秒
#虚拟主机的配置
server {
listen 80;
#监听端口
server_name localhost;
提供服务的域名主机名
location / {
root html;
#站点的根目录html
index index.html index.htm;
#默认支持的首页文件
}
error_page 500 502 503 504 /50x.html;
#出现对应的http状态码使用50x.html回应客户。
location = /50x.html {
#回应客户的的页面文件
root html;
#对应的站点目录问html
}
}
}
整个站点的核心框架:
worker_processes 1;
error_log logs/error.log;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
server {
listen 80;
server_name localhost;
location / {
root html;
index index.html index.htm;
}
}
}
保存退出。
3.Nginx虚拟主机配置
虚拟主机类型(基于域名的虚拟主机【常用】,基于端口的虚拟主机【企业内部】,基于ip的虚拟主机【不常用】)
默认情况下nginx.conf与nginx.conf.default内容相同。diff进行比较。
egrep -v "#|^#" nginx.conf.default >nginx.conf
去掉包含#和空行重定向到nginx.conf中。
worker_processes 1;
error_log logs/error.log;
events {
worker_connections 1024;
}
http {
include mime.types;
server {
listen 80;
server_name www.wy.org;
location / {
root html/www;
index index.html index.htm;
}
}
}
虚拟主机关键部分:sever{}内容
创建域名及站点目录。
mkdir -p /usr/local/nginx/html/www
echo "http://www.wyl.org" > www/index.html
语法检查:
/usr/local/nginx/sbin/nginx -t
1.创建nginx 启动脚本
vim /etc/init.d/nginx
#!/bin/bash
# chkconfig: - 30 21
# description: http service.
# Source Function Library
. /etc/init.d/functions
# Nginx Settings
NGINX_SBIN="/usr/local/nginx/sbin/nginx"
NGINX_CONF="/usr/local/nginx/conf/nginx.conf"
NGINX_PID="/usr/local/nginx/logs/nginx.pid"
RETVAL=0
prog="Nginx"
start() {
echo -n $"Starting $prog: "
mkdir -p /dev/shm/nginx_temp
daemon $NGINX_SBIN -c $NGINX_CONF
RETVAL=$?
echo
return $RETVAL
}
stop() {
echo -n $"Stopping $prog: "
killproc -p $NGINX_PID $NGINX_SBIN -TERM
rm -rf /dev/shm/nginx_temp
RETVAL=$?
echo
return $RETVAL
}
保存退出
2.更改权限
chmod 755 /etc/init.d/nginx
chkconfig --add nginx
chkconfig nginx on
.重新加载(企业最好用重新加载的方式启动nginx防止一旦服务无法启动造成数据丢失。)
/usr/local/nginx/sbin/nginx -s reload
查看进程:
ps -ef|grep nginx
netstat -lntp|grep 80
echo "192.168.1.105 >/etc/hosts" >www.wyl.org">>/etc/hosts
curl测试ok
3.如何配置多个虚拟站点
在nginx主配置文件中http{}区域,配置多个server区域即可。
如:http{}中加入多个server区域
server {
listen 80;
server_name bbs.wy.org;
location / {
root html/www/bbs;
index index.html index.htm;
server {
listen 80;
server_name blog.wy.org;
location / {
root html/blog;
index index.html index.htm;
保存退出即可。
创建站点目录这里我们使用shell可以手动自己创建
[root@localhost conf]# for n in bbs blog
> do
> mkdir -p /usr/local/nginx/html/$n;
> echo "http://$n.wyl.org">/usr/local/nginx/html/$n/index.html;
> echo "192.168.1.105 $n.wyl.org">>/etc/hosts;
> cat /usr/local/nginx/html/$n/index.html;
> cat /etc/hosts
> done
运行即可。
重新加载测试成功.
4.基于端口的虚拟主机配置:
修改nginx.conf 中http{}区域虚拟主机server块中的listen 项即可,域名可以不做修改。
修改www.wyl.org:对应的listen 为80;bbs.wyl.org对应的为8080;blog对应的为8081
测试如下:
基于ip的虚拟主机配置只需要将nginx.conf 中http{}区域虚拟主机listen块中的端口 项改成ip:端口即可;server_name也可改成ip即可。
5.企业实战
企业中常常将虚拟主机与主配置文件分开,有利于管理。例如:将虚拟主机从nginx.conf中剥离,在/usr/local/nginx/conf/ 下创建vhosts目录单独存放,然后在创建单个虚拟主机的配置文件,加入虚拟主机配置内容。如www.conf; bbs.conf; blog.conf等虚拟主机配置文件。然后在主配置文件(nginx.conf)加入加载虚拟主机配置文件的路径如:include vhosts/*.conf;
具体配置如下:
mkdir /usr/local/nginx/conf/vhosts
[root@localhost bbs]# sed -n \'11,19p\' /usr/local/nginx/conf/nginx.conf
server {
listen 80;
server_name www.wyl.org;
location / {
root html/www;
index index.html index.htm;
}
}
查看继续:
sed -n \'11,19p\' /usr/local/nginx/conf/nginx.conf >/usr/local/nginx/conf/vhosts/www.conf
sed -n \'20,27p\' /usr/local/nginx/conf/nginx.conf >/usr/local/nginx/conf/vhosts/bbs.conf
sed -n \'28,36p\' /usr/local/nginx/conf/nginx.conf >/usr/local/nginx/conf/vhosts/blog.conf
查看sed -n \'11,36p\' /usr/local/nginx/conf/nginx.conf 无误后继续--》删除主配置文件中的虚拟主机配置。
sed -i \'11,36d\' /usr/local/nginx/conf/nginx.conf 删除后如图:
执行插入命令:插入虚拟主机配置文件路径:
sed -i \'10 i include vhosts/*.conf;\' /usr/local/nginx/conf/nginx.conf
检查文件是否创建成果:
tree /usr/local/nginx/conf/vhosts/
cat /usr/local/nginx/conf/vhosts/www.wyl.org
cat /usr/local/nginx/conf/vhosts/bbs.wyl.org
cat /usr/local/nginx/conf/vhosts/blog.wyl.org
检测:/usr/local/nginx/sbin/nginx -t
加载:/usr/local/nginx/sbin/nginx -s reload
测试curlxxxx ok
6.虚拟主机别名设置:
如给www.wyl.org添加别名wyl.org只需要在虚拟主机配置文件中 server_name www.wyl.org 后加wyl.org即可。当然在本机hosts文件中加入本地ip解析即可。测试curl wyl.org 结果ok;
4.配置nginx status 状态信息检查功能
1.nginx status模块ngx_http_suub_status_module模块
查看是否安装该模块:
/usr/local/nginx/sbin/nginx -V
查看已经安装:具体配置如下:
cat >>/usr/local/nginx/conf/vhosts/status.conf<<EOF
> #suatus
> server {
> listen 80;
> server_name status.nginx.org;
> location / {
> stub_status on;
> access_log off;
> }
> }
> EOF
由于我曾经在主配置文件中定义了vhosts下文件的加载配置。所以不用再重新配置主配置文件。Stub_status on ;表示打开状态开关。
添加本地域名解析:echo "192.168.1.105 status.nginx.org">>/etc/hosts
检查配置文件 /usr/local/nginx/sbin/nginx -t
重新加载: /usr/local/nginx/sbin/nginx -sreload
测试:curl status.nginx.org
Active connections: 1
server accepts handled requests
12 12 23
Reading: 0 Writing: 1 Waiting: 0
Active connections:1 表示正处于活动状态的连接数为1个
第一个server 12 表示nginx启动到目前为止共处理了12个连接
第二个accepts 12表示nginx启动到目前一共进行了12次握手(请求丢失数=握手数-连接数)
第三个 handled requests表示总共处理了多少次请求 23次请求。
Readming 表示nginx读取到客户端的header信息数,
Writing :1为nginx返回给客户端的header的信息数,
waiting:0 表示nginx已经处理完正在等会下一次请求指令的驻留连接,在开启keep-alived的情况下,这个值等于active -(readming+writing)
5.为nginx 增加错误日志(error_log)配置
error_log属于ngx_core_module核心模块。Error_log可以放在main区块中全局配置,也可放置在不同虚拟主机中单独记录。
error_log的语法格式
error_log file level;
关键字 日志文件 错误日志级别
企业常见级别如:warn|error|crit三个级别注意不要配置info等低级别,这回带来巨大的I/O消耗。
错误日志默认级别为:error
错入日志可以放置的标签如:main,http,server,location区。
错入日志配置:只需要在主配置文件nginx.conf中设置全局即:work_processes 1;后面加入error_log logs/error.log;即可。
6.nginx 访问日志(access_log)配置
Nginx访问日志access_log主要由log_format和access_log控制
logformat:定义记录日志格式
access_log:制定日志的路径及使用何种日志格式记录日志
Logformat默认日志格式如:
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默认配置:
access_log logs/access.log main;
Main 为日志标签,记录日志时,用过main标签选择制定格式。
日志变量说明:
Remote_addr 记录访问网站客户端,
http_x_forwarded_for 当前由代理服务器时,设置web节点记录客户端地址的配置,此参数生效前提是代理服务器上也进行了相关的x_forwarded_for设置。
$remote_user 远程客户端名称。
$time_local 记录访问的时间时区。
$request http请求起始行信息
$status http状态码
$body_bytes_sents 服务器发送给客户端的响应body字节数,
$http_referer 记录次请求是从哪个连接访问过来的。可以根据referer设置防盗链设置。
$http_user_agent 记录客户端访问信息。如浏览器手机客户端等。
默认日志:
客户端地址-远程客户端名称-访问时间-http请求起始行信息-http状态码-服务器发送给客户端的响应body字节数-从哪里链接访问过来的-客户端信息,设置web节点记录客户端地址配置。
access_log 参数说明:buffer=size 存放访问日志的缓冲区大小,flush=time 为将缓冲区的日志刷到磁盘的时间,gzip表示压缩级别,[if=condition]表示其他条件,默认无需配置。
access_log off 表示不记录访问日志。
放置位置在:http,server,location ,if in location,limit_except中。
企业实战::
将默认配置文件中的log_format配置复制在主配置文件nginx.conf中即可:
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_www.log main;不指定格式,将已默认的combined格式记录。
配置虚拟主机访问日志文件的路径:如在虚拟主机配置文件中server区添加
sed -i \'8 i access_log logs/access_www.log main;\' /usr/local/nginx/conf/vhosts/bbs.conf
sed -i \'8 i access_log logs/access_www.log main;\' /usr/local/nginx/conf/vhosts/www.conf
sed -i \'8 i access_log logs/access_www.log main;\' /usr/local/nginx/conf/vhosts/blog.conf
/usr/local/nginx/sbin/nginx -t
/usr/local/nginx/sbin/nginx -s reload
测试
curl www.wyl.org
cat access_www.log
cat access_www.log
192.168.1.105(客户端ip) -(没有远程用户所以为空)) - [09/Nov/2016:00:29:11 +0800](时间) "GET / HTTP/1.1" (http起始行信息)200 (http状态码)19(服务器发送给客户端的响应body字节数) "-"(直接访问所以referer为空) "curl/7.19.7 (x86_64-redhat-linux-gnu) libcurl/7.19.7 NSS/3.14.0.0 zlib/1.2.3 libidn/1.18 libssh2/1.4.2"(客户端信息) "-"(没有代理服务器所以为空。)
可以在日志参数中加上buffer和flush 选项,这样可在高并发场景下提升网站的访问性
在虚拟主机日志配置区域加入:gzip buffer=32k flush=5s配置如下:buffer=size 存放访问日志的缓冲区大小,flush=time 为将缓冲区的日志刷到磁盘的时间,gzip表示压缩级别
具体配置如下:
access_log logs/access_www.log main gzip buffer=32k flush=5s;
配置如下
sed -i s@"main;"@"main gzip buffer=32k flush=5s;"@g /usr/local/nginx/conf/vhosts/www.conf
sed -i s@"main;"@"main gzip buffer=32k flush=5s;"@g /usr/local/nginx/conf/vhosts/bbs.conf
sed -i s@"main;"@"main gzip buffer=32k flush=5s;"@g /usr/local/nginx/conf/vhosts/blog.conf
检查ok
7.Nginx 访问日志轮询切割
Nginx默认会将所有访问日志生成到一个指定的访问日志文件中access.log里 但这样一来时间长了就会导致日志个头很大。不利于日志的分析和处理。因此需要对日志进行按天或者按小时切割。分成不同的文件保存。这里设置按天切割。
apache有切割工具,nginx需要写脚本进行切割。
vim /usr/local/sbin/nginx_logrotate.sh
#!bin/bash
d=`date -d "-1 day" +%F`
[ -d /tmp/nginx_log ] || mkdir /tmp/nginx_log
mv /tmp/access.log /tmp/nginx_log/$d.log
/etc/init.d/nginx reload >/dev/null
cd /tmp/nginx_log/
gzip -f $d.log
保存退出即可。
sh -x /usr/local/sbin/nginx_logrotate.sh
ls /tmp/nginx_log/ 列出日志压缩文件。
最后写一个计划任务:每天0点0分执行 即可。
cat >>/var/spool/cron/root <<EOF
00 00 * * * * /bin/sh /usr/local/sbin/nginx_logrotate.sh
设置ok.
8.Nginx location
location 作用:根据用户请求的url进行匹配,匹配成功后来执行相关的引用操作。
语法:
location [ = | ~ | ~*| ^~ ] uri {
......
}
location指令 [ = | ~ | ~*| ^~]匹配标识 uri 匹配的网址,{...}匹配后需要执行的配置端。
实例:
location = / {
[ configuration A ]
}
当用户请求”/”时将匹配configuration A
location / {
[ configuration B ]
}
当用户请求”/index.html”时将匹配configuration B
location /documents/ {
[ configureation C ]
}
当用户请求“documents”时将匹配configuration C
location ^~ /images/ {
[ configureation D ]
}
当用户请求“images/1.gif”时将匹配configuration D
location ~* \\.(gif|jpg|jpeg)$ {
[ configureation E ]
}
当用户请求“/documents/1.jpg”时将匹配configuration E
匹配优先级:
“Location = {” 精确匹配
“location ^~/images/ {”匹配常规字符串,不做正则匹配
“location ~*\\.(gif|jpg|jpeg)$ {”正则匹配
“location / {” 所有location都不能匹配后的默认匹配。
9.Nginx rewrite--[301,302 url跳转]
Nginx rewrite 主要实现URL地址重写。需要pcre软件支持。默认支持。
Nginx rewrite 指令语法:
应用位置::server location if
URL rewrite跳转
Rewrite指令的重写功能由flag标记来实现结尾的flag标记分别有last,break,redirect,permanent。
Last ,break实现url重写
Redirect,permanent 实现url跳转。
Last :匹配完规则后,继续向下匹配。
Break:匹配完规则后,立即终止。不在向下匹配。
Redirect :返回302 临时重定向。浏览器地址会显示跳转后的url
Permanent:返回301 永久重定向,浏览器地址栏会显示跳转后的url
301跳转实现访问wyl.org 跳转到bbs.wyl.org
实例:
vim /usr/local/nginx/conf/vhosts/www.conf
server {
listen 80;
server_name wyl.org ;
rewrite ^/(.*) http://bbs.wyl.org permanent;
}
server {
listen 80;
server_name www.wyl.org;
location / {
root html/www;
index index.html index.htm;
}
access_log logs/access_www.log main gzip buffer=32k flush=5s;
}
跳转后显示:
不同域名跳转实战:
在server标签中加入:
if ( $http_host ~* “^(.*)\\.wyl.org$” ){
Set $domain $1;
rewrite ^(.*) http://bbs.wyl.org/$domain/$domain/wyl.html break;
}
建议:location 标签,sever标签用last标签,普通location 或if用rewrite格则,建议使用break标记。
10.Nginx 访问认证
一般用在企业内部人员访问的地址上,例如企业网站后台,mysql客户端phpmyadmin,等
访问认证两个参数:
auth_basic 语法:auth_basic string|off;
auth_basic_user_file 语法:auth_basic_user_file file;
两者使用位置:http,server.location,limit_except中
配置如下:
location ~ .*admin\\.php$ {
auth_basic "aminglinux auth";
auth_basic_user_file /usr/local/nginx/conf/.htpasswd;
}
密码可以用apache 再带的htpasswd或openssl passwd 设置用户名密码
设置密码用户添加密码
/usr/local/apache2/bin2/bin/htpasswd 工具创建
如果没有yum install htpasswd -y 安装后设置。
htpasswd -c /usr/local/nginx/conf/.htpasswd wyl
New password: 设置密码回车即可。
cat /usr/local/nginx/conf/.htpasswd
wyl:COmsWkRlYZVe.
登录直接下载。
如配置:
测试访问
Nginx服务优化
1.隐藏:软件版本信息
curl -I 192.168.1.105
HTTP/1.1 200 OK
Server: nginx/1.4.4
Date: Wed, 09 Nov 2016 12:16:40 GMT
Content-Type: text/html
Content-Length: 19
Last-Modified: Tue, 08 Nov 2016 08:42:01 GMT
Connection: keep-alive
ETag: "58218fd9-13"
Accept-Ranges: bytes
配置::在Nginx配置文件中加入:server_tokens off;放置在http区。
1.更改源码隐藏nginx软件名及版本号。略过。
2.更改nginx服务的默认用户
nginx -s /sbin/nologin -M
更改配置文件参数将默认的#user nobody;改成user nginx nginx;即可。
3.优化ningx的服务性能(worker进程数)
如更改nginx 配置文件中的worke_processes 1;nginx有master进程,和worker进程,
Master进程用于管理进程,服务的进程为worker进程。
设置worker_processer 后面的数即可。一般设置为和cpu核数相同即可。
查看cpu核数:/proc/cupinfo
grep processor /proc/cpuinfo|wc -l
grep -c processor /proc/cpuinfo
数字是4 则表示一颗4核cup
sed -i \'s#worker_processes 1#worker_processes 4#g\' nginx.conf
grep worker_processes nginx.conf
重新加载后:ps -ef|grep nginx|grep -v grep查看worker的进程数量。
4.优化绑定不同的nginx 进程到不同的cpu上
默认情况下nginx多个进程有可能泡在某一个cpu或cpu的某一核上,导致nginx进程使用硬件资源不均。优化尽可能第分配不同的nginx进程给不同的cpu处理。达到充分利用硬件多cup核数资源的目的。
在mian 区,worker_processer 4;下加入worker_cpu_affinity 0001 0010 0100 1000;保存退出即可
worker_processer 1;
worker_cpu_affinity 0001 0010 0100 1000;
压力测试:webbench -c 20000 -t 180 http://192.168.1.105
5.Nginx 事件处理模型优化
Ningx的链接处理机制在不同操作系统上采用不同的I/0模型。在linux下采用的是epoll的i/0多路复用模型,在freebsd中使用的kqueue 的1/0多路复用模型。在solaris中使用的、dev/poll方式的i/o多路复用模型,在windows中使用的是icop等等。
Nginx模型有:usr[ kqueue|rtsig|epoll|dev/poll|select|poll]本次使用epoll模型
配置如下:nginx配置文件中events设置nginx模型
events {
use epoll;
}
解释:select,poll为标准工作模式,kqueue和epoll为高效的工作模式,不同的是epoll是在linux平台上,kqueue在BSD系统中,对于linux中nginx设置为epoll为高性能,高并发设置。
events区 是设置nginx的工作模式及连接数上线
6.调整nginx单个进程允许的客户端最大连接数
控制参数:work_connections
配置文件中work_connections的值具体根据服务器性能和程序的内存使用量来指定
默认为1024,此值受linux系统进程的最大打开文件数限制,在执行系统命令:“ulimit -Hsn 65535”后才能生效。或配置相应的文件后“worker_connections”才能生效。
此设置放置在配置文件的events区。
7.配置nginx worker进程最大打开文件数
控制参数:work_rlimit_nofile 配置如下
放置在main区,设置:
work_rlimit_nofile 65535;
8.开启高效文件传输模式
设置参数:sendfile on;
同时设置tcp_nopush tcp_nodelay指令为on 可防止 网络及磁盘i/o阻塞。
设置如下:
sendfile on;
tcp_nopush on;
可设置在:http;server;location标签。
9.优化Nginx连接参数,调整连接超时时间
设置在参数”:keepalive_timeout 60;客户端连接保持回话的超时时间为60s,超过这个时间服务器自动关闭连接,此参数为参考值
解决的问题:
将无用的链接设置问尽快超时,保护服务器的系统资源不被浪费。
当连接很多时,及时断掉那些建立好长时候,但又不工做事的连接,减少占用资源。
Lnmp环境,如果用户请求一个动态服务器,则nginx就会建立连接,请求fastCGI服务器及后端的mysql,此时就需要设置一个超时时间,在用户容忍的时间内返回数据。当然后端的fastCGI及mysql也有设置超时时间。
设置参数tcp_nodelay on;
用于激活tcp_nondelay功能提高i/o性能。
默认情况下内核不会马上发送肯能会等待更多的字节组成一个数据包,这样可能会提高i/o的性能。
设置参数client_header_timeout
设置读取客户端请求数据包的超时时间,如果超过这个时间客户端还没有发送完整的header数据服务器端将返回request time out 408 错误,可指定一个超时时间,放置客户利用http原理进行攻击。
设置参数:client_body_timeout 15;
用于读取客户端请求主体的超时时间。默认为60
设置:send_timeout 25;
用于指定响应客户端的超时时间。默认为60可改为25.如果在这个时间内客户端没有收到任何数据连接将关闭。
10.上传文件大小的限制(动态引用)
client_max_body_size 8m
设置最大的允许的客户端请求主体大小,这个请求头域有“content_length”如果超出了此配置值,客户端将相应收到413错误。意思是请求的条目过大,浏览器不能正常显示等,默认为1m 具体设置根据公司业务调整。
11.FastCGI 相关参数调优(配合php引擎动态服务器)
Nginx fastCGi客户端向后请求php动态引擎服务(php-ffpm-[fastCGI服务器])的相关参数,
Fastcgi_connect_timeout 240;
Fas
以上是关于Nginx快速入门菜鸟笔记的主要内容,如果未能解决你的问题,请参考以下文章