线上webserver配置优化

nginx/conf/nginx.conf
1.worker_processes
nginx要开启的进程数,一般等于cpu的总核数。
开发机示例:
worker_processes 2;
线上机示例:
worker_processes 8; //线上最大开到8即可

2.worker_cpu_affinity 使用该选项可以绑定worker进程和CPU,使各进程使用独立的cpu内核。 线上机示例: //对应worker_processes配置的个数 worker_cpu_affinity

阅读全文

ODP3.0压力测试

测试环境:
CentOS release 4.3 :

12  Intel(R) Xeon(R) CPU E5-2620 0 @ 2.00GHz

MemTotal:       132124636 kB    #free内存2G

(此服务器为50人在用的共享开发机,测试时有30+个odp服务正在运行)

odp 3.0.2:
PHP             5.4.33.1

Nginx           1.0.32.0

ap              1.1.4.2

saf             1.0.18.0

测试程序:

用到了ap MVC框架和saf模块,<span

阅读全文

web页面响应时间长,要怎么排查?

9

说明:
web页面响应时间长,要怎么排查?

因为是lnmp系统,可以通过设置nginx日志,记录nginx处理请求的时间、开启php慢执行来排查

解决:
一、修改nginx.conf日志格式,记录nginx响应时间
# vim /usr/local/nginx/conf/nginx.conf //添加$request_time $upstream_response_time参数

      log_format  access  '$remote_addr - $remote_user [$time_local] "$request" '
                          '$request_time $upstream_response_time '
                          '$status $body_bytes_sent "$http_referer" '
                          '"$http_user_agent" $http_x_forwarded_for';

$request_time: request processing time in seconds with a milliseconds resolution;time elapsed between the first bytes were read from the client and the log write after the last bytes were sent to the client$request_time。nginx处理请求的时间,指的就是从接受用户请求数据到发送完回复数据的时间。

$upstream_response_time: keeps servers response times in seconds with a milliseconds resolution. Several responses are also separated by commas and colons. $upstream_response_timephp-cgi的响应时间,说的有点模糊,它指的是从Nginx向后端建立连接开始,到接受完数据然后关闭连接为止的时间。因为会有重试,它可能有多个时间段。一般来说,$upstream_response_time 会比$request_time时间短。(其实也可以加上upstream_status的状态返回值)

截取部份日志,可以看到客户端获取test.php。nginx共花费了5.308s(这个时间包括了php后端处理的时间),php后端处理也花费了5.308s。这说明响应慢很有可能是因为php程序的原因。接下就就是排查php
$request_time时间比$upstream_response_time长,这有可能是因为web页面通过post上传较大的数据,nginx一直在接收数据。

116.21.<span

阅读全文

nginx日志切分方案

nginx的日志切分问题一直是运维nginx时需要重点关注的。本文将简单说明下nginx支持的两种日志切分方式。

定时任务切分

所谓的定时任务切分,是指通过定时任务(比如crontab),发送信号给nginx,让其重新打开文件。该方法也是nginx官网上面比较推荐的,原文说明比较清楚,这里在说明下:

发送USR1 信号会让nginx主动重新打开日志文件,故操作如下:

$ mv access.log access.log.0 $ kill -USR1 `cat master.nginx.pid` $ sleep 1 $ gzip access.log.0 # do something with access.log.0

总结 :优点是思路较为简单,但效果明显,而且对error_log 同样适用;缺点是有外部依赖(比如 crontab)

自切分

自切分是指让nginx自身实现日志切分功能,不依赖crontab等东西。 其主要原理是依赖access_log的强大功能—- 可以用变量定义请求的log路径。

nginx的acess_log 功能非常强大,其完整指令说明如下,这里主要说明定义日志路径的功能;关于syslog还有gzip, buffer等特性,后续再说明。

access_log指令:

Syntax: access_log path [format [buffer=size [flush=time]] [if=condition]]; access_log path format gzip[=level] [buffer=size] [flush=time] [if=condition]; access_log syslog:server=address[,parameter=value] [format [if=condition]]; access_log off; Default: access_log logs/access.log combined; Context

阅读全文

ODP的ddos防御模块

odp本身自带了防止被ddos攻击的防御模块:policy_frame。开启了该模块后,会对于频繁访问的来源进行屏蔽。 线上环境应该开启该模块,但是在进行压力测试的时候,会导致压力测试被屏蔽,关闭方法如下:

~/odp/webserver/conf/nginx.conf 将其中的 policy_frame 选项由 on 修改为 off

~/odp/webserver/sbin/nginx -s reload

nginx中配置跨域支持功能

在nginx.conf中配置
http {

add_header Access-Control-Allow-Origin *;
add_header Access-Control-Allow-Headers X-Requested-With;
add_header Access-Control-Allow-Methods GET,POST,OPTIONS;

}

这样就可以实现GET,POST,OPTIONS的跨域请求的支持。

也可以 add_header Access-Control-Allow-Origin http://test.yanjingang.com; –指定允许的url;

配置项详细解释:w3c-Cross-Origin Resource Sharing

nginx的反向代理:proxy_pass

1. nginx 反向代理proxy_pass  / 没有/的区别

在nginx的反向代理到新的URL时,要注意新的url是否加上了/;如果加上了/那就代表绝对路径,不需要加location的匹配字符串了:

location ^~/web_test/ { #proxy_set_header Host $host; proxy_set_header Host test.com; proxy_set_header X-Real-IP $remote_addr; ……..<br

阅读全文

Nginx 使用 http auth basic 认证

使用 nginx 作为前端服务器。某些资源要保护。用 http auth basic 认证简单方便。 nginx 的 http auth basic 的密码是用 crypt(3) 加密的。具体可以参考:http://wiki.nginx.org/HttpAuthBasicModule

以我们做一个简单的后台管理为例, 地址:http://xxxx/admin/*, 对admin 下面的文件进行权限管理;

1. 进入ngnix配置的地址,以我的ubuntu为例;  cd /etc/ngnix

2. 使用命令生成passfile 文件: htpasswd -c -d /etc/nginx/pass_file  username

a. 输入以上命令,回车输入密码,再次回车,输入确认密码

3. 检查pass_file是否已经存在

阅读全文