nginx 全能模块安装-技巧集合

nginx 全能模块-好东西要收藏 🙂

今天编译nginx 的时候发现了这个模块 很强大!以下是摘自网络的介绍!

转自 http://www.colorfuldays.org/tag/memc-nginx-module/

“针对一些访问量很大的页面,特别是瞬时访问量很大的系统,jetty无法支撑住请求,这时候可以使用memc-nginx-module模块模块与srcache-nginx-module模块将请求页面数据存放在
memcached中,可大大提升系统的并发能力。

#memc-nginx-module模块安装
由于angentzh维护的openresty封装了所有这些模块,因此直接使用openresty是最方便的选择。
安装过程如下:

wget http://openresty.org/download/ngx_openresty-1.4.2.7.tar.gz

tar -xvzf ngx_openresty-1.4.2.7.tar.gz

#在configure之前,需要安装openresty依赖的库,安装如下:

yum install readline-devel pcre-devel openssl-devel -y

#编译安装openresty,注意此处需要加上concat模块

 ./configure --add-module=/opt/memcache-dir/nginx_concat_module/trunk/
 make
 make install

#简介
nginx_concat_module 是淘宝研发的针对 nginx 的文件合并模块,主要用于合并前端代码减少 http 请求数。如果你的应用环境中部署了 nginx,那么可以考虑尝试此模块减少请求数。
安装
安装 nginx_concat_module 需要重新编译 nginx。可以从这里 checkout 最新的代码,

svn checkout http://code.taobao.org/svn/nginx_concat_module/trunk/ $NGINX_CONCAT_MODULE

然后下载适合你自己版本的 nginx 源码包,在 ./configure 中增加参数
–add-module=$NGINX_CONCAT_MODULE
就可以继续 nginx 的编译安装过程。
Tips
顺便废话下,默认编译 nginx 的 gcc 参数带了 “-g” 开关。处于洁癖和性能考虑,可以考虑将其关闭。编辑文件
$NGINX_SOURCE_DIR/auto/cc/gcc
注释掉下面的行
CFLAGS=”$CFLAGS -g”
如果觉得有必要,可以修改下面的编译参数(感觉性能提高不大)
NGX_GCC_OPT=”-O2″
配置
新的 nginx 编译安装好以后,配置 nginx_concat_module 主要有如下的选项

 # nginx_concat_module 主开关
 concat on;

# 最大合并文件数
 # concat_max_files 10;

# 只允许同类型文件合并
 # concat_unique on;

# 允许合并的文件类型,多个以逗号分隔。如:application/x-javascript, text/css
 # concat_types text/html;
 (详细察看安装包下 INSTALL 和 README 文件)。其实不用那么复杂,简单的配置
 location / {
 concat on;
 }

ngx_openresty默认安装在/usr/local/openresty目录下。

修改nginx.conf文件,配置memc-nginx-module模块
 在http段,增加memc_server,并启用keepalive

upstream memc_server {
 server 127.0.0.1:11211;
 keepalive 512 ;
 }
 在server段,配置需要缓存的页面

location ~ ^/qiang/[0-9]*.html$ {
 set $qiang_key $request_uri;
 srcache_fetch GET /memc $qiang_key;
 srcache_store PUT /memc $qiang_key;
 add_header X-Cached-From $srcache_fetch_status;

proxy_redirect off;
 proxy_set_header Host $host;
 proxy_set_header Accept-Encoding "";
 proxy_set_header X-Real-IP $remote_addr;
 proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
 proxy_pass http://127.0.0.1:8080;
 }
 location /memc {
 internal;
 memc_connect_timeout 100ms;
 memc_send_timeout 100ms;
 memc_read_timeout 100ms;
 set $memc_key $query_string;
 # 统一缓存5s
 set $memc_exptime 30;
 memc_pass memo_server;
 }

#说明
阅读上述Nginx缓存页面配置时,必需清楚nginx请求执行的顺利并不是只按照配置文件中指令所处的顺序。每一个指令都绑定在Ngnix请求执行顺序的一个阶段,上述配置的指令中,执行顺序大致如下:

srcache_fetch –> proxy_pass –> srcache_store
以上配置必须运行在srcache-nginx-module模块0.14及以上版本之上。
ngx_openresty-1.2.3.8对应的srcache-nginx-module版本为0.16
重启应用,验证
重启nginx,访问指定的URL,验证memc-nginx-module模块是否生效。验证方法如下:
上面配置文件中的

add_header X-Cached-From $srcache_fetch_status;
指令会将cache是否命中的状态输出成HTTP的一个扩展头信息里面,因此用Safari,Chrome,Firefox等浏览器查看http请求返回的数据就可以知道缓存是否命中。
$srcache_fetch_status 的取值有 “HIT”,“MISS”。

#性能测试
对指定缓存进行压力测试,qps最高达到2300req/s,此时系统的cpu,内存等资源仍然很低,而千兆网卡则全部写满,瓶颈已不在cpu和内存上了,达到预期目标。

学习了 :) 真是好东西!!!

#技巧集合

#为nginx设置默认虚拟主机(空主机头,默认主机头)

nginx的默认虚拟主机在用户通过IP访问,或者通过未设置的域名访问(比如有人把他自己的域名指向了你的ip)的时候生效
最关键的一点事,在server的设置里面添加这一行:
listen 80 default;
后面的default参数表示这个是默认虚拟主机。

这个设置非常有用。
比如别人通过ip或者未知域名访问你的网站的时候,你希望禁止显示任何有效内容,可以给他返回500.
目前国内很多机房都要求网站主关闭空主机头,防止未备案的域名指向过来造成麻烦。就可以这样设置:
复制代码 代码如下:

server {

listen 80 default;

return 500;

}

#也可以把这些流量收集起来,导入到自己的网站,只要做以下跳转设置就可以:
#复制代码 代码如下:

server {
listen 80 default;
rewrite ^(.*) http://www.tiaoh.com permanent;
}

#虚拟主机配置

.nginx.conf内容如下:

程序代码

worker_processes 1; #根据cpu 来定

error_log /host/nginx/logs/error.log crit; #日志

pid /host/nginx/logs/nginx.pid;

events {
use epoll;
worker_connections 10240; #连接数
}

http {
include /host/nginx/conf/mime.types;
default_type application/octet-stream;

#charset gb2312;

server_names_hash_bucket_size 128;
client_header_buffer_size 32k;
large_client_header_buffers 4 32k;

keepalive_timeout 60;

fastcgi_connect_timeout 300;
fastcgi_send_timeout 300;
fastcgi_read_timeout 300;
fastcgi_buffer_size 128k;
fastcgi_buffers 4 128k;
fastcgi_busy_buffers_size 128k;
fastcgi_temp_file_write_size 128k;
client_body_temp_path /host/nginx/client_body_temp;
proxy_temp_path /host/nginx/proxy_temp;
fastcgi_temp_path /host/nginx/fastcgi_temp;

gzip on;
gzip_min_length 1k;
gzip_buffers 4 16k;
gzip_http_version 1.0;
gzip_comp_level 2;
gzip_types text/plain application/x-javascript text/css application/xml;
gzip_vary on;

client_header_timeout 3m;
client_body_timeout 3m;
send_timeout 3m;
sendfile on;
tcp_nopush on;
tcp_nodelay on;
#设定虚拟主机
include /host/nginx/conf/vhost/www_test_com.conf;
include /host/nginx/conf/vhost/www_test1_com.conf;
include /host/nginx/conf/vhost/www_test2_com.conf;
}

2.在conf目录下建立个vhost目录,在vhost目录下分别建立www_test_com.conf,www_test1_com.conf,www_test2_com.conf 3个文件

www_test_com.conf代码如下:
程序代码

server {
listen 192.***.***.***:80; #换成你的IP地址
client_max_body_size 100M;
server_name www.test.com; #换成你的域名
charset gb2312;
index index.html index.htm index.php;
root /host/wwwroot/test; #你的站点路径

#打开目录浏览,这样当没有找到index文件,就也已浏览目录中的文件
autoindex on;

if (-d $request_filename) {
rewrite ^/(.*)([^/])$ http://$host/$1$2/ permanent;
}

error_page 404 /404.html;
location = /40x.html {
root /host/wwwroot/test; #你的站点路径
charset on;
}

# redirect server error pages to the static page /50x.html
#
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /host/wwwroot/test; #你的站点路径
charset on;
}

#将客户端的请求转交给fastcgi
location ~ .*.(php|php5|php4|shtml|xhtml|phtml)?$ {
fastcgi_pass 127.0.0.1:9000;
include /host/nginx/conf/fastcgi_params;
}

#网站的图片较多,更改较少,将它们在浏览器本地缓存15天
location ~ .*.(gif|jpg|jpeg|png|bmp|swf)$
{
expires 15d;
}

#网站会加载很多JS、CSS,将它们在浏览器本地缓存1天
location ~ .*.(js|css)?$
{
expires 1d;
}

location /(WEB-INF)/ {
deny all;
}

#设定日志格式
log_format access '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" $http_x_forwarded_for';
#设定本虚拟主机的访问日志
access_log /host/nginx/logs/down/access.log access; #日志的路径,每个虚拟机一个,不能相同
server_name_in_redirect off;
}

 

3.www_test1_com.conf和www_test2_com.conf,文件和上面的基本相同,具体的日志内容如下:
www_test1_com.conf如下:
程序代码
……….

#设定日志格式
log_format test1 '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" $http_x_forwarded_for';
#设定本虚拟主机的访问日志
access_log /host/nginx/logs/test1/test1.log test1; #日志的路径,每个虚拟机一个,不能相同
server_name_in_redirect off;
}

发表评论

This site uses Akismet to reduce spam. Learn how your comment data is processed.