首页 > Personal > cocos2d-x > nginx使用
2013
12-28

nginx使用

最近用cocos2d-x开发游戏,准备使用nginx做http代理服务,所以研究了一下nginx的使用配置。
服务器是centos,首先配置的是/etc/nginx/nginx.conf文件,里面几个主要参数,
worker_processes 1; // 一般配置为机器的cpu数,像我的虚拟机就一个核,配置为1
worker_cpu_affinity xxx; // 如果配置多个核的话可以指定分配到哪个核上,一般是优化用的
worker_rlimit_nofile 65535; // 最大打开文件数,ulimit -n看一下自己机器的open files大小,默认一般是1024,ulimit –SHn 65535设置为最大打开数,这项也设为最大文件数65535

events{}下面的,
use epoll; // 默认应该就是这个模式,用centos的应该知道比select快得多
worker_connections 1024; //  最大连接数 1024 暂时够了

http{}下面自己的访问配置可以放到/etc/nginx/conf.d文件夹里,有些基础的配置
sendfile on; // 一般要设为on,如果是下载应用的话可以设为off
keepalive_timeout 30; // 超时时间
tcp_nodelay on; // tcp设为nodelay模式
client_header_buffer_size 1k; // 如名字一样,客户端请求头缓冲的大小,默认会用这个读取
large_client_header_buffers 4 16k; // 如果头过大会用这个读取
#gzip on; // 可以开启gzip压缩,因为我不是做网页访问,所以可以注释掉
下面是文件缓存的配置,可以用于http,server,location三个环境中,我的服务暂时还用不到file cache
#open_file_cache max=65535 inactive=60s; // 缓存文件配置,max最大数,inactive是多久不请求删除,
#onpen_file_cache_errors off; // 是否记录cache错误
#open_file_cache_valid 1d; // 检查缓存文件是否有效的时间间隔
#open_file_cache_min_uses 1; // 上面的open_file_cache inactive时间内最小的使用数,小于这个数将被删除
涉及到的一下变量,http://localhost:88/test1/test2/test.html
$remote_addr //  客户端地址
$remote_user // 客户端用户名
$time_local // 时间时区
$request // 请求的url和http协议
$status // 请求状态, 如200, 404
$server_addr //
$server_name // 服务器名称
$server_port // 服务器端口
$host // 请求中的Host,如果没有,则是服务器名
$http // 请求地址localhost
$http_cookie // cookie
$request_uri // 请求全地址http://localhost:88/test1/test2/test.html
$uri // 请求的地址test1/test2/test.html
$document_uri // 同$uri
$document_root
$http_referer // 从哪个链接连过来的
$http_user_agent //浏览器信息
$http_x_forwarded_for // 如果使用了代理$remote_add就是代理服务器的地址了,保存的内容就是请求中的X-Forwarded-For信息,下面会有说明

下面就是自己写的http配置了,放置在/etc/nginx/conf.d
upstream project_name { // 设置负载均衡server,默认是轮询
ip_hash; // 设置为根据客户端ip地址哈希到固定的服务器,可以保证一个客户端固定访问一台服务器,如果可用的话
server 127.0.0.1:8000 weight=2; // weight可以设置服务器的权重
server 127.0.0.1:8001 down; // 不参与负载均衡
server 127.0.0.1:8002 max_fails=1 fail_timeout=60s; // 请求失败的最大数,超过返回错误,后面是失败后暂停的时间
server 127.0.0.1:8001 backup; // 其他机器忙时使用
}

server {
listen 80 default; // 监听端口,default表示这是默认服务器,可以用来禁止ip访问
server_name _; // 虚拟主机名称,_全匹配
server_name www.xxx.com xxx.com; // 虚拟主机名称,使用空格隔开,最先匹配全名
server_name *.xxx.com; // 然后匹配*通配符开始的
server_name xxx.*; // 然后匹配*通配符结束的
server_name ~^(.*); // 最后匹配正则,使用的perl的正则,以~开始表示使用正则,中的.要使用\.,包含{}的要使用“”引号,
index index.html; // index页
root /home/www; // 服务器目录

if ($http ~* www\.(.*) ) { // if 判断条件,一般用来rewrite,http://www.xxx.com/foo –> http://xxx.com/foo,if 可以用到-f,!-f,文件是否存在,-d,!-d目录是否存在,-e,!-e文件目录是否存在,-x,!-x是否可以执行
set $host_without_www $1; // 用来设置变量
break; // 退出if
rewrite ^(.*)$ http://$host_without_www$1 permanent; // last重新开始一个请求还要再次判断这个规则,break终止后不在进行rewrite匹配,redirect临时重定向302,permanent永久重定向301,可以用在server,location和if中
return 500; // 返回状态500
}

location = / { // =表示精确匹配
}

location ^~ /static { // ^~表示uri以字符串开头,用来匹配目录
expires 1d; // 过期时间
}

location ~ \.php$ { // ~表示区分大小写的正则,~*表示不区分大小写
}

location !~ /static { // !~表示区分大小写的不匹配正则,!~*表示不区分大小写
}

location / { // /是通配符表示任何请求都匹配
prox_set_header Host $http_host; // 重写请求头,来写入请求的实际host,不然会变成代理服务器
prox_set_header X-Real-IP $remote_addr; // 设置一个变量为请求ip,或者
prox_set_header X-Forwarded-For $proxy_add_x_forwarded_for; // X-Forwarded-For 格式为 client1,proxy1,proxy2,$proxy_add_x_forwarded_for没有X-Forwarded-For 就等于$remote_addr,
proxy_pass http://project_name; // 代理转发,可以转向上面设置的负载服务器
proxy_pass http://127.0.0.1:8000; // 也可以指向其他服务器,不包含uri
proxy_redirect off; // 反向代理
}

location / {
root /home/www/html/; // 访问的根目录设置
allow 127.0.0.1; // 允许访问
deny all; // 禁止访问
}

location ~* \.(gif|jpg|swf)$ {
valid_referers none blocked start.xxx.cn sta.xxx.cn;
if ($invalid_referer) {
rewrite ^/ http://$host/logo.png;
}
}

server {
listen 443;
ssl on; // 打开ssl
ssl_certificate *.crt; // 证书和key
ssl_certificate_key *.key;
ssl_session_timeout 5m; // session过期时间
ssl_protocols SSLv3 TLSv1; // 协议
#ssl_client_certificate client.crt; // 客户端证书
#ssl_verify_client on; // 认证客户端
#ssl_session_timeout 5m; // session 过期时间
#ssl_ciphers ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP;
#ssl_prefer_server_ciphers on; // 认证ssl证书
}
如果证书自己生成的话,使用openssl
openssl genrsa -out *.key 2048 // 使用openssl 生成 key,名字自己写
openssl req -new -key *.key -out *.csr // 生成证书请求文件
openssl x509 -req -in *.csr -signkey *.key -out ssl.crt -days 4096 // 生成证书crt
把.key和.crt填在上面

最后编辑:
作者:wy182000
这个作者貌似有点懒,什么都没有留下。

留下一个回复