常用命令

  1. 动态重启: nginx -s relod
  2. 检查配置 nginx -t

直接下载

  1. location按照如下配置:
  2. location ~ ^/downlod/(.*)$ {
  3. add_header Content-Disposition "attachment; filename=$1";
  4. }

文件服务器

  1. location下增加如下配置:
  2. autoindex on;# 显示目录
  3. autoindex_exact_size on;# 显示文件大小
  4. autoindex_localtime on;# 显示文件时间

413 Request Entity Too Large

  1. Nginx出现的413 Request Entity Too Large错误,这个错误一般在上传文件的时候出现,打开nginx主配置文件nginx conf,找到http{}段,添加解决方法就是打开nginx主配置文件nginx conf,一般在 usr local ngin
  2. 设置上传文件大小
  3. client_max_body_size 2m;
  4. 重启
  5. sudo /etc/init.d/nginxd reload
  6. 重启Nginx
  7. kill -HUP `cat /usr/local/nginx/logs/nginx.pid `

alias

  1. location ^~ /MA/ {
  2. alias /Users/web;
  3. }
  4. 当我同样浏览器访问 /MA/index.html
  5. 使用root 会映射为/Users/web/MA/index.html
  6. 使用alias 会直接映射 /User/web/index.html

负载均衡策略

  1. 1、轮询(默认)
  2. 每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器down掉,能自动剔除。
  3. upstream backserver {
  4. server 192.168.0.14;
  5. server 192.168.0.15;
  6. }
  7. 2、指定权重
  8. 指定轮询几率,weight和访问比率成正比,用于后端服务器性能不均的情况。
  9. upstream backserver {
  10. server 192.168.0.14 weight=10;
  11. server 192.168.0.15 weight=10;
  12. }
  13. 3IP绑定 ip_hash
  14. 每个请求按访问iphash结果分配,这样每个访客固定访问一个后端服务器,可以解决session的问题。
  15. upstream backserver {
  16. ip_hash;
  17. server 192.168.0.14:88;
  18. server 192.168.0.15:80;
  19. }
  20. 4fair(第三方)
  21. 按后端服务器的响应时间来分配请求,响应时间短的优先分配。
  22. upstream backserver {
  23. server server1;
  24. server server2;
  25. fair;
  26. }
  27. 5url_hash(第三方)
  28. 按访问urlhash结果来分配请求,使每个url定向到同一个后端服务器,后端服务器为缓存时比较有效。
  29. upstream backserver {
  30. server squid1:3128;
  31. server squid2:3128;
  32. hash $request_uri;
  33. hash_method crc32;
  34. }
  35. 在需要使用负载均衡的server中增加
  36. proxy_pass http://backserver/;
  37. upstream backserver{
  38. ip_hash;
  39. server 127.0.0.1:9090 down; (down 表示单前的server暂时不参与负载)
  40. server 127.0.0.1:8080 weight=2; (weight 默认为1.weight越大,负载的权重就越大)
  41. server 127.0.0.1:6060;
  42. server 127.0.0.1:7070 backup; (其它所有的非backup机器down或者忙的时候,请求backup机器)
  43. }
  44. max_fails :允许请求失败的次数默认为1.当超过最大次数时,返回proxy_next_upstream 模块定义的错误
  45. fail_timeout:max_fails次失败后,暂停的时间

Nginx启动脚本

有的Linux安装不是服务的方式,如果想将Nginx变成服务的方式。 新建脚本,添加如下内容。并将脚本移至/etc/rc.d/init.d下。
cd /etc/rc.d/init.d/
chkconfig —add nginx.sh
chkconfig nginx on —- 开机启动

  1. #!/bin/sh
  2. # chkconfig : 345 86 14
  3. # description:
  4. NGINX_DIR=/usr/local/nginx
  5. export NGINX_DIR
  6. case $1 in
  7. 'start')
  8. echo "start nginx...."
  9. $NGINX_DIR/sbin/nginx
  10. ;;
  11. 'reload')
  12. echo "Reload nginx configuration...."
  13. kill -HUP `cat $NGINX_DIR/logs/nginx.pid`
  14. ;;
  15. 'stop')
  16. echo "stopping nginx...."
  17. kill -15 `cat $NGINX_DIR/logs/nginx.pid`
  18. ;;
  19. 'list')
  20. ps aux | egrep '(PID|nginx)'
  21. ;;
  22. 'testconfig')
  23. $NGINX_DIR/sbin/nginx -t
  24. ;;
  25. 'version')
  26. $NGINX_DIR/sbin/nginx -v
  27. ;;
  28. 'tailLog')
  29. tail -f $NGINX_DIR/logs/error.log
  30. ;;
  31. 'catLog')
  32. cat $NGINX_DIR/logs/error.log
  33. ;;
  34. *)
  35. echo "usage: `basename $0` {start | reload | stop | list | testconfig | version | tailLog | catLog}"
  36. esac

配置模板

  1. user nobody;
  2. worker_processes 1;
  3. error_log logs/error.log info;
  4. pid logs/nginx.pid;
  5. events {
  6. worker_connections 65535;
  7. use epoll;
  8. }
  9. http {
  10. include mime.types;
  11. default_type application/octet-stream;
  12. sendfile on;
  13. tcp_nopush on;
  14. keepalive_timeout 65;
  15. server_names_hash_bucket_size 128;
  16. client_header_buffer_size 32k;
  17. large_client_header_buffers 4 32k;
  18. client_max_body_size 300m;
  19. proxy_redirect off;
  20. proxy_set_header Host $http_host;
  21. proxy_set_header X-Real-IP $remote_addr;
  22. proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
  23. proxy_connect_timeout 90;
  24. proxy_send_timeout 90;
  25. proxy_read_timeout 90;
  26. proxy_buffer_size 16k;
  27. proxy_buffers 4 64k;
  28. proxy_busy_buffers_size 128k;
  29. proxy_temp_file_write_size 128k;
  30. #设置缓存存储路径、存储方式、分配内存大小、磁盘最大空间、缓存期限
  31. proxy_cache_path /var/cache/nginx/proxy_cache levels=1:2
  32. keys_zone=http-cache:500m max_size=10g inactive=30d;
  33. proxy_temp_path /var/cache/nginx/proxy_cache/tmp;
  34. #设置 group1 的服务器
  35. upstream fdfs_group1 {
  36. server 192.168.26.128:8080 weight=1 max_fails=2 fail_timeout=30s;
  37. server 192.168.26.130:8080 weight=1 max_fails=2 fail_timeout=30s;
  38. }
  39. log_format main '$remote_addr - $remote_user [$time_local] "$request" '
  40. '$status $body_bytes_sent "$http_referer" '
  41. '"$http_user_agent" "$http_x_forwarded_for"';
  42. server {
  43. listen 80;
  44. server_name localhost;
  45. access_log logs/host.access.log main;
  46. #设置 group1 的反向代理参数
  47. location /group1/M00 {
  48. proxy_next_upstream http_502 http_504 error timeout invalid_header;
  49. proxy_cache http-cache;
  50. proxy_cache_valid 200 304 12h;
  51. proxy_cache_key $uri$is_args$args;
  52. proxy_pass http://fdfs_group1;
  53. expires 30d;
  54. }
  55. #设置清除缓存的访问权限
  56. location ~ /purge(/.*) {
  57. allow 127.0.0.1;
  58. allow 10.10.10.0/24;
  59. deny all;
  60. proxy_cache_purge http-cache $1$is_args$args;
  61. }
  62. }
  63. }

Nginx日志分析

  1. 系统日志:
  2. /var/log/message //系统主日志文件
  3. /var/log/secure //认证、安全
  4. /var/log/dmesg //和系统启动相关
  5. 应用日志:
  6. access.log //nginx访问日志
  7. mysqld.log //mysql运行日志
  8. xferlog //和访问FTP服务相关
  9. 程序脚本:
  10. 开发语言:CC++、JavaPHP
  11. 框架:DjangoMVCServlet
  12. 脚本语言:ShellPython
  13. HTTP状态码介绍
  14. 1** 信息,服务器收到请求,需要请求者继续执行操作
  15. 2** 成功,操作被成功接收并处理
  16. 3** 重定向,需要进一步的操作已完成请求
  17. 4** 客户端错误,请求包含语法错误或者无法完成请求
  18. 5** 服务器错误,服务器在处理请求的过程中发生了错误
  19. 脚本实现功能介绍(Nginx):
  20. 功能一:分析HTTP状态码在100-200200-300300-400400-500500以上,五个区间的请求条数
  21. 功能二:分析日志中HTTP状态为404500的请求条数
  22. 功能三:找出访问最多的IP
  23. cat /opt/logs/nginx/access.log | awk '${print $1}' | sort | uniq -c | sort -rn | more
  24. 获得状态码
  25. cat /opt/local/nginx/logs/access.log | awk '{print $9}'
  26. cat /opt/local/nginx/logs/access.log | grep -ioE "HTTP\/1\.[1|0]\"[[:blank:]][0-9]{3}"

统计脚本

  1. #!/bin/sh
  2. #Program function:Nginx's log analysis
  3. resettem=$(tput sgr0)
  4. Logfile_path='/opt/local/nginx/logs/access.log'
  5. Check_http_status()
  6. {
  7. Http_statu_codes=(`cat $Logfile_path|grep -ioE "HTTP\/1\.[1|0]\"[[:blank:]][0-9]{3}"|awk -F "[ ]+" '{
  8. if($2>=100&&$2<200){i++}
  9. else if($2>=200&&$2<300){j++}
  10. else if($2>=300&&$2<400){k++}
  11. else if($2>=400&&$2<500){l++}
  12. else if($2>=500){m++}
  13. }END{
  14. print i?i:0,j?j:0,k?k:0,l?l:0,m?m:0,i+j+k+l+m
  15. }'`)
  16. echo -e '\E[33m' "The number of http status[100+]:" ${resettem} ${Http_statu_codes[0]}
  17. echo -e '\E[33m' "The number of http status[200+]:" ${resettem} ${Http_statu_codes[1]}
  18. echo -e '\E[33m' "The number of http status[300+]:" ${resettem} ${Http_statu_codes[2]}
  19. echo -e '\E[33m' "The number of http status[400+]:" ${resettem} ${Http_statu_codes[3]}
  20. echo -e '\E[33m' "The number of http status[500+]:" ${resettem} ${Http_statu_codes[4]}
  21. echo -e '\E[33m' "All request number:" ${resettem} ${Http_statu_codes[5]}
  22. }
  23. Check_http_code()
  24. {
  25. Http_Code=(`cat $Logfile_path|grep -ioE "HTTP\/1\.[1|0]\"[[:blank:]][0-9]{3}"|awk -v total=0 -F '[ ]+' '{
  26. if($2!=""){code[$2]++;total++}
  27. else{exit}
  28. }END{
  29. print code[404]?code[404]:0,code[403]?code[403]:0,code[500]?code[500]:0,total
  30. }'`)
  31. echo -e '\E[33m' "The number of http status[404]:" ${resettem} ${Http_Code[0]}
  32. echo -e '\E[33m' "The number of http status[403]:" ${resettem} ${Http_Code[1]}
  33. echo -e '\E[33m' "The number of http status[500]:" ${resettem} ${Http_Code[2]}
  34. echo -e '\E[33m' "All request number:" ${resettem} ${Http_Code[3]}
  35. }
  36. Check_http_status
  37. Check_http_code

使用Nginx+Tomcat访问本地目录

  1. #user nobody;
  2. worker_processes 1;
  3. #error_log logs/error.log;
  4. #error_log logs/error.log notice;
  5. #error_log logs/error.log info;
  6. #pid logs/nginx.pid;
  7. events {
  8. worker_connections 1024;
  9. }
  10. http {
  11. include mime.types;
  12. default_type application/octet-stream;
  13. # 1.以下是第一处修改,配置项目名称和Tomcat的访问地址,
  14. upstream portal {
  15. ip_hash;
  16. #sticky;
  17. server 127.0.0.1:8080 max_fails=2 fail_timeout=30s;
  18. }
  19. # 以上是第一处修改。
  20. #log_format main '$remote_addr - $remote_user [$time_local] "$request" '
  21. # '$status $body_bytes_sent "$http_referer" '
  22. # '"$http_user_agent" "$http_x_forwarded_for"';
  23. #access_log logs/access.log main;
  24. sendfile on;
  25. #tcp_nopush on;
  26. #keepalive_timeout 0;
  27. keepalive_timeout 65;
  28. #gzip on;
  29. server {
  30. listen 80;
  31. server_name localhost;
  32. # 2.以下是第二处修改 ,配置项目首页的访问地址为http://localhost/portal ,即nginx映射后的访问地址。
  33. location /portal {
  34. proxy_pass http://portal;
  35. # 以上是第二处修改
  36. #后端的Web服务器可以通过X-Forwarded-For获取用户真实IP
  37. proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
  38. #以下是一些反向代理的配置,可选。
  39. proxy_set_header Host $host;
  40. #nginx跟后端服务器连接超时时间(代理连接超时)
  41. proxy_connect_timeout 3000;
  42. #后端服务器数据回传时间(代理发送超时)
  43. proxy_send_timeout 3000;
  44. #连接成功后,后端服务器响应时间(代理接收超时)
  45. proxy_read_timeout 3000;
  46. #设置代理服务器(nginx)保存用户头信息的缓冲区大小
  47. proxy_buffer_size 4k;
  48. #proxy_buffers缓冲区,网页平均在32k以下的设置
  49. proxy_buffers 4 32k;
  50. #高负荷下缓冲大小(proxy_buffers*2)
  51. proxy_busy_buffers_size 64k;
  52. #设定缓存文件夹大小,大于这个值,将从upstream服务器传
  53. proxy_temp_file_write_size 64k;
  54. }
  55. # 3.前2步已经准备完毕,以下是第三处修改,配置本地图片路径信息(本篇重点)
  56. location /portal/file/ { #b.配置本地图片路径(图片存在d盘:portal/file文件夹下,注意前后的“/”不可省略),完整访问地址为第http://localhost/portal/file/xxxxx.jpg
  57. root d:/; #a.设置nginx根目录为d盘。
  58. }
  59. # 以上是第三处修改
  60. #charset koi8-r;
  61. #access_log logs/host.access.log main;
  62. location / {
  63. root html;
  64. index index.html index.htm;
  65. }
  66. #error_page 404 /404.html;
  67. # redirect server error pages to the static page /50x.html
  68. #
  69. error_page 500 502 503 504 /50x.html;
  70. location = /50x.html {
  71. root html;
  72. }
  73. }
  74. }

资料