使用Nginx搭建高性能web服务器

Jackey Nginx 4,224 次浏览 , 没有评论

lnmp环境介绍

nginx在高并发时的性能是apache的5~10倍,所以经常我们在线上环境用nginx代替apahce.
nginx支持:

  • email
  • web服务器
  • 负载均衡服务器
  • 缓存服务器
  • 流媒体服务器

Nginx管理

启动Nginx
/usr/local/nginx/sbin/nginx
测试配置文件是否正确
/usr/local/nginx/sbin/nginx -t
关闭nginx
Killall nginx

配置文件详解

  1. #运行用户,默认是Nginx
  2. user www www;
  3. #Nginx进程,一般设置为何cpu核心数一样
  4. worker_processes 8;
  5. #错误日志存放目录
  6. error_log /data1/logs/nginx_error.log crit;
  7. #进程pid存放位置
  8. pid /usr/local/webserver/nginx/nginx.pid;
  9.  
  10. #最大文件打开数(连接),可设置为系统优化后的ulimit -HSn的结果
  11. worker_rlimit_nofile 65535;
  12. cpu亲和力配置,让不同的进程使用不同的cpu
  13. worker_cpu_affinity 0001 0010 0100 1000 0001 00100100 1000;
  14. #工作模式及连接数上限
  15. events
  16. {
  17. #epoll是多路复用IO(I/O multiplexing)中的一种方式,但是仅用于Linux2.6以上内核,可以大大提高Nginx的性能
  18. use epoll;
  19. #单个后台worker process进程的最大并发连接数
  20. worker_connections 65535;
  21. }
  22.  
  23. http
  24. {
  25. #文件扩展名与类型映射表
  26. include mime.types;
  27. #默认文件类型
  28. default_type application/octet-stream;
  29.  
  30. #limit模块,可防范一定量的DDOS攻击
  31. #用来存储session会话的状态,如下是为session分配一个名为one的10M的内存存储区,限制了每秒只接受一个ip的一次请求 1r/s
  32. limit_req_zone $binary_remote_addr zone=one:10m rate=1r/s;
  33. limit_conn_zone $binary_remote_addr zone=addr:10m;
  34.  
  35. #设置请求缓存
  36. server_names_hash_bucket_size 128;
  37. client_header_buffer_size 32k;
  38. large_client_header_buffers 4 32k;
  39. client_max_body_size 8m;
  40.  
  41. #隐藏响应header和错误通知中的版本号
  42. server_tokens off;
  43.  
  44. #开启高效传输模式
  45. sendfile on;
  46. #激活tcp_nopush参数,可以允许吧httpresponse header和文件的开始放在一个文件发布,积极的作用是减少网络报文段的数量
  47. tcp_nopush on;
  48. #连接超时时间,单位是秒
  49. keepalive_timeout 60;
  50. #激活tcp_nodelay,内核会等待将更多的字节组成一个数据包,从而提高I/O性能
  51. tcp_nodelay on;
  52.  
  53. #FastCGI相关参数,为了改善网站性能,减少资源占用,提高访问速度
  54. fastcgi_connect_timeout 300;
  55. fastcgi_send_timeout 300;
  56. fastcgi_read_timeout 300;
  57. fastcgi_buffer_size 64k;
  58. fastcgi_buffers 4 64k;
  59. fastcgi_busy_buffers_size 128k;
  60. fastcgi_temp_file_write_size 128k;
  61.  
  62. #开始gzip压缩功能
  63. gzip on;
  64. #设置允许压缩的页面最小字节数,页面字节数从header头的content-length中获取,默认值是0,表示不管页面多大都进行压缩,建议设置大于1K,如果小于1K可能会越压越大
  65. gzip_min_length 1k;
  66. #压缩缓冲区大小,表示申请4个单位为16K的内存作为压缩结果流缓存,默认值是申请与原始数据大小相同的内存空间来存储gzip压缩结果
  67. gzip_buffers 4 16k;
  68. #压缩版本(默认1.1,前端为squid2.5时,使用1.0)用于设置识别HTTP协议版本,默认是1.1,目前大部分浏览器都已支持gzip解压缩,使用默认即可
  69. gzip_http_version 1.0;
  70. #压缩比率,用来指定gzip压缩比,1压缩比最小,处理速度最快;9压缩比最大,传输速度快,但处理最慢也比较消耗cpu资源
  71. gzip_comp_level 2;
  72. #用来指定压缩的类型,“text/html”类型总是会被压缩
  73. gzip_types text/plain application/x-javascript text/css application/xml;
  74. #vary header 支持,该选项可以让前端的缓存服务器缓存经过gzip压缩的页面,例如用squid缓存经过Nginx压缩的数据
  75. gzip_vary on;
  76.  
  77. #limit_zone crawler $binary_remote_addr 10m;
  78.  
  79. server
  80. {
  81. listen 80;
  82. #使用的域名
  83. server_name gopher.cc
  84. #默认访问的文件
  85. index index.html index.htm index.php;
  86. #网站的目录
  87. root /data0/htdocs/blog;
  88.  
  89. #limit_conn crawler 20;
  90.  
  91. location ~ .*\.(php)?$
  92. {
  93. #fastcgi_pass unix:/tmp/php-cgi.sock;
  94. fastcgi_pass 127.0.0.1:9000;
  95. fastcgi_index index.php;
  96. include fcgi.conf;
  97. }
  98.  
  99. location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$
  100. {
  101. expires 30d;
  102. }
  103.  
  104. location ~ .*\.(js|css)?$
  105. {
  106. expires 1h;
  107. }
  108. #记录日志的格式
  109. log_format access '$remote_addr - $remote_user [$time_local] "$request" '
  110. '$status $body_bytes_sent "$http_referer" '
  111. '"$http_user_agent" $http_x_forwarded_for';
  112. access_log /data1/logs/access.log access;
  113. }
  114. }

nginx做网站的负载均衡

注意:只能做HTTP(网站)的负载均衡
定义后端的服务器
Max_fails 允许失败的次数;fail_timeout每次连接尝试多长时间

与server平级

  1. upstream php_server_pool {
  2. # nginx默认支持两种转发策略:
  3. #1.带权值的轮询 (默认)
  4. #2.ip_hash : 同一个IP会被转发到同一台服务器(不会出现SESSION丢失的问题)
  5. ip_hash;
  6. server 192.168.1.10:80 weight=4 max_fails=2 fail_timeout=30s;
  7. server 192.168.1.11:80 weight=4 max_fails=2 fail_timeout=30s;
  8. server 192.168.1.12:80 weight=4 max_fails=2 fail_timeout=30s;
  9. }

设置请求时转发到后端服务器

放在server里面

  1. location / {
  2. proxy_pass http://php_server_pool;
  3. proxy_set_header Host gopher.cc;
  4. proxy_set_header X-Forwarded-For $remote_addr; #获取真正的客户端IP地址,并转发给负载服务器,服务端的获取方式 $_SERVER[‘X-Forwarded-For’];
  5. }

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注

Go