lnmp环境介绍
nginx在高并发时的性能是apache的5~10倍,所以经常我们在线上环境用nginx代替apahce.
nginx支持:
- web服务器
- 负载均衡服务器
- 缓存服务器
- 流媒体服务器
Nginx管理
启动Nginx
/usr/local/nginx/sbin/nginx
测试配置文件是否正确
/usr/local/nginx/sbin/nginx -t
关闭nginx
Killall nginx
配置文件详解
- #运行用户,默认是Nginx
- user www www;
- #Nginx进程,一般设置为何cpu核心数一样
- worker_processes 8;
- #错误日志存放目录
- error_log /data1/logs/nginx_error.log crit;
- #进程pid存放位置
- pid /usr/local/webserver/nginx/nginx.pid;
-
- #最大文件打开数(连接),可设置为系统优化后的ulimit -HSn的结果
- worker_rlimit_nofile 65535;
- cpu亲和力配置,让不同的进程使用不同的cpu
- worker_cpu_affinity 0001 0010 0100 1000 0001 00100100 1000;
- #工作模式及连接数上限
- events
- {
- #epoll是多路复用IO(I/O multiplexing)中的一种方式,但是仅用于Linux2.6以上内核,可以大大提高Nginx的性能
- use epoll;
- #单个后台worker process进程的最大并发连接数
- worker_connections 65535;
- }
-
- http
- {
- #文件扩展名与类型映射表
- include mime.types;
- #默认文件类型
- default_type application/octet-stream;
-
- #limit模块,可防范一定量的DDOS攻击
- #用来存储session会话的状态,如下是为session分配一个名为one的10M的内存存储区,限制了每秒只接受一个ip的一次请求 1r/s
- limit_req_zone $binary_remote_addr zone=one:10m rate=1r/s;
- limit_conn_zone $binary_remote_addr zone=addr:10m;
-
- #设置请求缓存
- server_names_hash_bucket_size 128;
- client_header_buffer_size 32k;
- large_client_header_buffers 4 32k;
- client_max_body_size 8m;
-
- #隐藏响应header和错误通知中的版本号
- server_tokens off;
-
- #开启高效传输模式
- sendfile on;
- #激活tcp_nopush参数,可以允许吧httpresponse header和文件的开始放在一个文件发布,积极的作用是减少网络报文段的数量
- tcp_nopush on;
- #连接超时时间,单位是秒
- keepalive_timeout 60;
- #激活tcp_nodelay,内核会等待将更多的字节组成一个数据包,从而提高I/O性能
- tcp_nodelay on;
-
- #FastCGI相关参数,为了改善网站性能,减少资源占用,提高访问速度
- fastcgi_connect_timeout 300;
- fastcgi_send_timeout 300;
- fastcgi_read_timeout 300;
- fastcgi_buffer_size 64k;
- fastcgi_buffers 4 64k;
- fastcgi_busy_buffers_size 128k;
- fastcgi_temp_file_write_size 128k;
-
- #开始gzip压缩功能
- gzip on;
- #设置允许压缩的页面最小字节数,页面字节数从header头的content-length中获取,默认值是0,表示不管页面多大都进行压缩,建议设置大于1K,如果小于1K可能会越压越大
- gzip_min_length 1k;
- #压缩缓冲区大小,表示申请4个单位为16K的内存作为压缩结果流缓存,默认值是申请与原始数据大小相同的内存空间来存储gzip压缩结果
- gzip_buffers 4 16k;
- #压缩版本(默认1.1,前端为squid2.5时,使用1.0)用于设置识别HTTP协议版本,默认是1.1,目前大部分浏览器都已支持gzip解压缩,使用默认即可
- gzip_http_version 1.0;
- #压缩比率,用来指定gzip压缩比,1压缩比最小,处理速度最快;9压缩比最大,传输速度快,但处理最慢也比较消耗cpu资源
- gzip_comp_level 2;
- #用来指定压缩的类型,“text/html”类型总是会被压缩
- gzip_types text/plain application/x-javascript text/css application/xml;
- #vary header 支持,该选项可以让前端的缓存服务器缓存经过gzip压缩的页面,例如用squid缓存经过Nginx压缩的数据
- gzip_vary on;
-
- #limit_zone crawler $binary_remote_addr 10m;
-
- server
- {
- listen 80;
- #使用的域名
- server_name gopher.cc
- #默认访问的文件
- index index.html index.htm index.php;
- #网站的目录
- root /data0/htdocs/blog;
-
- #limit_conn crawler 20;
-
- location ~ .*\.(php)?$
- {
- #fastcgi_pass unix:/tmp/php-cgi.sock;
- fastcgi_pass 127.0.0.1:9000;
- fastcgi_index index.php;
- include fcgi.conf;
- }
-
- location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$
- {
- expires 30d;
- }
-
- location ~ .*\.(js|css)?$
- {
- expires 1h;
- }
- #记录日志的格式
- 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 /data1/logs/access.log access;
- }
- }
nginx做网站的负载均衡
注意:只能做HTTP(网站)的负载均衡
定义后端的服务器
Max_fails 允许失败的次数;fail_timeout每次连接尝试多长时间
与server平级
- upstream php_server_pool {
- # nginx默认支持两种转发策略:
- #1.带权值的轮询 (默认)
- #2.ip_hash : 同一个IP会被转发到同一台服务器(不会出现SESSION丢失的问题)
- ip_hash;
- server 192.168.1.10:80 weight=4 max_fails=2 fail_timeout=30s;
- server 192.168.1.11:80 weight=4 max_fails=2 fail_timeout=30s;
- server 192.168.1.12:80 weight=4 max_fails=2 fail_timeout=30s;
- }
设置请求时转发到后端服务器
放在server里面
- location / {
- proxy_pass http://php_server_pool;
- proxy_set_header Host gopher.cc;
- proxy_set_header X-Forwarded-For $remote_addr; #获取真正的客户端IP地址,并转发给负载服务器,服务端的获取方式 $_SERVER[‘X-Forwarded-For’];
- }