lnmp的nginx的配置
在nginx.conf中可以看见基本的配置,之前在搭建博客的时候也配置了一些。下面看一些其他常见的配置。应该用include进行配置方便管理
一、下面是网上的一份配置,有些地方改了一下。
#$开头是变量
#定义Nginx运行的用户和用户组
user work work;
#nginx进程数,建议设置为等于CPU总核心数
worker_processes 4; //这里设置成自己的服务器的核数
#指当一个nginx进程打开的最多文件描述符数目
worker_rlimit_nofile 204800;
#全局错误日志定义类型,[ debug | info | notice | warn | error | crit ]
error_log /opt/log/nginx/error.log error;
#工作模式及连接数上限
events {
#参考事件模型,use [ kqueue | rtsig | epoll | /dev/poll | select | poll ];
#epoll模型是Linux 2.6以上版本内核中的高性能网络I/O模型,如果跑在FreeBSD上面,就用kqueue模型
use epoll;
#单个后台worker process进程的最大并发链接数
worker_connections 102400;
}
#设定http服务器,利用它的反向代理功能提供负载均衡支持
http {
#文件扩展名与文件类型映射表
include mime.types;
#默认文件类型
default_type application/octet-stream;
#默认编码
server_tokens off;//这个是为了安全
charset utf-8;
#设定日志格式
#log_format main '$idXXXX\t$remote_addr\t$remote_user\t$time_local\t$http_host\t$request\t'
# '$status\t$body_bytes_sent\t$http_referer\t'
# '$http_user_agent\t$http_x_forwarded_for\t$request_time\t$upstream_response_time\t$userid';
log_format main "$cookie_idXXXX\t$remote_addr\t$remote_user\t[$time_local]\t$request_method\t$host\t$request_uri\t"
"$request_time\t$status\t$body_bytes_sent\t'$http_referer'\t"
"'$http_user_agent'\t'$http_x_forwarded_for'\t$upstream_addr\t$upstream_response_time\t$upstream_status\t";
#不可见字符分隔日志格式
#include other_log_format.conf;
#实时日志收集json格式日志
#include json_log_format.conf;
#日志流格式
log_format stream_log "$cookie_idXXXX\t$remote_addr\t$remote_user\t[$time_local]\t$request_method\t$host\t$request_uri\t"
"$request_time\t$status\t$body_bytes_sent\t'$http_referer'\t"
"'$http_user_agent'\t'$http_x_forwarded_for'\t$upstream_addr\t$upstream_response_time\t3";
#成功日志
access_log /opt/log/nginx/access.log main;
#access_log syslog:local6:notice:log1.op.XXXXdns.org:514:nginx-main-log main;
#指定 nginx 是否调用 sendfile 函数(zero copy 方式)来输出文件,对于普通应用,
#必须设为 on,如果用来进行下载等应用磁盘IO重负载应用,可设置为 off,以平衡磁盘与网络I/O处理速度,降低系统的uptime.
sendfile on;
#长连接超时时间,单位是秒
keepalive_timeout 60;
#服务器名称哈希表的最大值(默认512)[hash%size]
server_names_hash_max_size 1024;
#服务器名字的hash表大小
server_names_hash_bucket_size 256;
#客户请求头缓冲大小
client_header_buffer_size 4k;
#如果header过大,它会使用large_client_header_buffers来读取
large_client_header_buffers 4 256k;
client_header_timeout 1m;
client_body_timeout 1m;
send_timeout 1m;
#防止网络阻塞
tcp_nopush on;
tcp_nodelay on;
#允许客户端请求的最大单文件字节数
client_max_body_size 50m;
#缓冲区代理缓冲用户端请求的最大字节数
client_body_buffer_size 50m;
#nginx跟后端服务器连接超时时间(代理连接超时)
proxy_connect_timeout 5;
#后端服务器数据回传时间(代理发送超时)
proxy_send_timeout 15;
#连接成功后,后端服务器响应时间(代理接收超时)
proxy_read_timeout 15;
#设置代理服务器(nginx)保存用户头信息的缓冲区大小
proxy_buffer_size 4k;
#proxy_buffers缓冲区,网页平均在32k以下的话,这样设置
proxy_buffers 8 32k;
#高负荷下缓冲大小(proxy_buffers*2)
proxy_busy_buffers_size 64k;
#设定缓存文件夹大小,大于这个值,将从upstream服务器传
proxy_temp_file_write_size 64k;
proxy_intercept_errors on;
#客户端放弃请求,nginx也放弃对后端的请求
#proxy_ignore_client_abort on;
#代理缓存头信息最大长度[设置头部哈希表的最大值,不能小于你后端服务器设置的头部总数]
proxy_headers_hash_max_size 512;
#设置头部哈希表大小(默认64)[这将限制头部字段名称的长度大小,如果你使用超过64个字符的头部名可以加大这个值。]
proxy_headers_hash_bucket_size 256;
#变量哈希表的最大值(默认值)
variables_hash_max_size 512;
#为变量哈希表制定关键字栏的大小(默认64)
variables_hash_bucket_size 128;
#开启gzip压缩输出
gzip on;
#最小压缩文件大小
gzip_min_length 1k;
#压缩缓冲区
gzip_buffers 4 16k;
#压缩等级
gzip_comp_level 9;
#压缩版本(默认1.1,前端如果是squid2.5请使用1.0)
gzip_http_version 1.0;
#压缩类型,默认就已经包含textml
gzip_types text/plain application/x-javascript application/json application/javascript text/css application/xml text/javascript image/gif image/png;
gzip_vary on;
#map模块使用
map_hash_max_size 102400;
map_hash_bucket_size 256;
#Tengine Config
#concat on;
#trim on;
#trim_css off;
#trim_js off;
server_tokens off;
#footer "<!-- $remote_addr $server_addr $upstream_addr -->";
#rewrite_log on;
fastcgi_intercept_errors on;
#include other config file
include ../conf.d/*.conf;
#包含一些特殊站点的配置文件,此目录下文件暂时不包含在git自动管理过程中
include ../special/*.conf;
#屏蔽不加主机域名的默认请求
#server {
# listen *:80 default;
# server_name _ "";
# return 444;
#}
#ceshi by dongange 2016-01-07
#Nginx状态监测模块配置
req_status_zone server "$server_name,$server_addr:$server_port" 10M;
req_status server;
server {
listen 80;
server_name www.xxx.com; //域名一般改成自己的
access_log /opt/log/nginx/nginx_status/status_access.log main;
location / {
root html;
index index.html index.htm;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
location ~ \.php$ {
root /application/nginx/html/www;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME /application/nginx/html/www$fastcgi_script_name;
include fastcgi_params;
}
location /status {
req_status_show;
access_log /opt/log/nginx/nginx_status/status_access.log main;
allow 127.0.0.1; //允许访问ip
deny all; //禁止访问ip
}
location /stub_status {
stub_status on;
access_log /opt/log/nginx/nginx_status_stub/status_stub_access.log main;
allow 127.0.0.1;
deny all;
}
location /check_status {
check_status;
access_log /opt/log/nginx/nginx_status_check/status_access_check.log main;
allow 127.0.0.1;
deny all;
}
}
}
二、上面是一份常见配置根据自己需求改就好了,下面是上面没有涉及的。
1. expires,这个是用来缓存的,比如不常改变的js,css,图片等。
2.利用referer防止盗链,利用valid_referers..这个就可以防止盗链。
3. 利用limit_conn_zone来控制nginx的并发连接数量,这个可以防止有人搞事。利用apache的ab工具可以测试。
4.控制请求nginx的速率,这个目前看来没啥luan用。
expires用于客户浏览器本地缓存不常改变的js,css,图片等,配置如下:
location ~ .*\.(gif/jpg/png)$
{
expires 30d;//缓存时间
}
location ~ .*\.(js|css)?$
{
expires 30y;//缓存时间
}
referer防盗链配置:
location ~* \.(jpg|gif|mp3)$
{
valid_referers none blocked *.xxxx.com xxx.com;
if ($invalid_referer)
{
rewrite ^/ http://www.qita.com;
}
}
限制并发连接数:
limit_conn_zone $binary_remore_addr zone=addr:10m;(http里面写在)
location / {
root html;
index index.html index.hml;
limit_conn addr 1;//限制单ip并发连接数为1
}
上面是正常配置,还有一些比如fastCGI,负载均衡等