设为首页 收藏本站
查看: 2206|回复: 0

[经验分享] nginx优化及配置

[复制链接]

尚未签到

发表于 2018-11-11 06:55:20 | 显示全部楼层 |阅读模式
  vi /usr/local/nginx/conf/nginx.conf
  user www www;
  worker_processes 4;
  #错误日志存放目录
  error_log /usr/local/nginx/logs/error.log;
  error_log /usr/local/nginx/logs/error.log notice;
  error_log /usr/local/nginx/logs/error.log info;
  #进程pid存放位置
  pid /usr/local/nginx/logs/nginx.pid;
  #最大文件打开数(连接),可设置为系统优化后的ulimit -HSn的结果
  worker_rlimit_nofile 51200;
  #cpu亲和力配置,让不同的进程使用不同的cpu
  worker_cpu_affinity 0001 0010 0100 1000 0001 00100100 1000;
  #工作模式及连接数上限
  events {
  use epoll;    #epoll是多路复用IO(I/O Multiplexing)中的一种方式,但是仅用于linux2.6以上内核,可以大大提高nginx的性能
  worker_connections  1024;   #单个后台worker process进程的最大并发链接数
  }
  #设定http服务器,利用它的反向代理功能提供负载均衡支持
  http {
  #设定mime类型
  include mime.types;   #文件扩展名与类型映射表
  default_type application/octet-stream;  #默认文件类型
  include /usr/local/nginx/conf/proxy.conf;
  #设置日志模式
  log_format main '$remote_addr - $remote_user [$time_local] "$request" '
  '$status $body_bytes_sent "$http_referer" '
  '"$http_user_agent" "$http_x_forwarded_for"';
  access_log  logs/access.log  main;
  #设定请求缓存
  server_names_hash_bucket_size  128;
  client_header_buffer_size   512K;
  large_client_header_buffers  4 512k;
  #client_max_body_size   100m;
  #隐藏响应header和错误通知中的版本号
  server_tokens off;
  #开启高效传输模式
  sendfile        on;
  #激活tcp_nopush参数可以允许把httpresponse header和文件的开始放在一个文件里发布,积极的作用是减少网络报文段的数量。
  tcp_nopush      on;
  #激活tcp_nodelay,内核会等待将更多的字节组成一个数据包,从而提高I/O性能
  tcp_nodelay     on;
  #连接超时时间,单位是秒
  keepalive_timeout  60;
  #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.1;
  #压缩比率。用来指定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;
  #开启ssi支持,默认是off
  ssi on;
  ssi_silent_errors on;
  #反向代理负载均衡设定部分
  #upstream表示负载服务器池,定义名字为tomcat_pool的服务器池
  #此处为你tomcat的地址,可以写多个tomcat地址
  upstream tomcat_pool {
  server 192.168.254.133:8080 weight=1 max_fails=2 fail_timeout=30s;
  server 192.168.254.132:8080 weight=1 max_fails=2 fail_timeout=30s;
  server 192.168.254.131:8080 weight=1 max_fails=2 fail_timeout=30s;
  #设置由 fail_timeout 定义的时间段内连接该主机的失败次数,以此来断定 fail_timeout 定义的时间段内该主机是否可用。默认情况下这个数值设置为 1。零值的话禁用这个数量的尝试。
  #设置在指定时间内连接到主机的失败次数,超过该次数该主机被认为不可用。
  #这里是在30s内尝试2次失败即认为主机不可用!
  }
  #基于域名的虚拟主机
  server {
  

listen       80;   #监听端口  
server_name  www.web2.com;#此处替换为你自己的网址,如有多个中间用空格
  
index index.html index.htm index.php  index.html;#设定访问的默认首页地址
  
root /home/www/web; #设定网站的资源存放路径
  

  
#charset koi8-r;
  

  
#access_log  logs/host.access.log  main;
  

  
location / {
  

root   html;
  

    index index.jsp index.html index.htm;  
}
  

  
location ~ \.(jsp|jspx|dp)?$ #所有JSP的页面均交由tomcat处理
  
{
  proxy_set_header  Host $host;
  proxy_set_header  X-Real-IP $remote_addr;
  proxy_pass http://tomcat_pool;#转向tomcat处理
  
}
  

  
#设定访问静态文件直接读取不经过tomcat
  
location ~ .*\.(htm|html|gif|jpg|jpeg|png|bmp|swf|ioc|rar|zip|txt|flv|mid|doc|ppt|pdf|xls|mp3|wma)$
  {
  expires  30d;
  }
  

  #将符合js,css文件的等设定expries缓存参数,要求浏览器缓存。
  location ~ .*\.(js|css)?$
  {
  expires  30d;  #客户端缓存上述js,css数据30天
  }
  

  
access_log  /usr/local/nginx/logs/ubitechtest.log main;#设定访问日志的存放路径
  

  
error_page   500 502 503 504  /50x.html;
  
location = /50x.html {
  root   html;
  
}
  

  
# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
  
#
  

  
#符合php扩展名的请求调度到fcgi server
  
location ~ \.php$ {
  fastcgi_pass   127.0.0.1:9000;  #抛给本机的9000端口
  fastcgi_index  index.php;   #设定动态首页
  fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;
  include        fastcgi_params;
  #include        fcgi.conf;
  
}
  

  ##add by 20140321#######nginx防sql注入##########
  ###start####
  if ( $query_string ~ ".[\;'\]." ){
  return 444;
  }
  if ($query_string  ~ ".(insert|select|delete|update|count|*|%|master|truncate|declare|\'|\;|and|or|(|)|exec). ")
  {
  return 444;
  }
  if ($request_uri ~ "(cost()|(concat()") {
  return 444;
  }
  if ($request_uri ~ "[+|(%20)]union[+|(%20)]") {
  return 444;
  }
  if ($request_uri ~ "[+|(%20)]and[+|(%20)]") {
  return 444;
  }
  if ($request_uri ~ "[+|(%20)]select[+|(%20)]") {
  return 444;
  }
  set $block_file_injections 0;
  if ($querystring ~ "[a-zA-Z0-9]=(..//?)+") {
  set $block_file_injections 1;
  }
  if ($querystring ~ "[a-zA-Z0-9]=/([a-z0-9_.]//?)+") {
  set $block_file_injections 1;
  }
  if ($block_file_injections = 1) {
  return 448;
  }
  set $block_common_exploits 0;
  if ($query_string ~ "(|%3E)") {
  set $block_common_exploits 1;
  }
  if ($query_string ~ "GLOBALS(=|[|\%[0-9A-Z]{0,2})") {
  set $block_common_exploits 1;
  }
  if ($query_string ~ "_REQUEST(=|[|\%[0-9A-Z]{0,2})") {
  set $block_common_exploits 1;
  }
  if ($query_string ~ "proc/self/environ") {
  set $block_common_exploits 1;
  }
  if ($querystring ~ "mosConfig[a-zA-Z_]{1,21}(=|\%3D)") {
  set $block_common_exploits 1;
  }
  if ($querystring ~ "base64(en|de)code(.*)") {
  set $block_common_exploits 1;
  }
  if ($block_common_exploits = 1) {
  return 444;
  }
  set $block_spam 0;
  if ($query_string ~ "\b(ultram|unicauca|valium|viagra|vicodin|xanax|ypxaieo)\b") {
  set $block_spam 1;
  }
  if ($query_string ~ "\b(erections|hoodia|huronriveracres|impotence|levitra|libido)\b") {
  set $block_spam 1;
  }
  if ($query_string ~ "\b(ambien|blue\spill|cialis|cocaine|ejaculation|erectile)\b") {
  set $block_spam 1;
  }
  if ($query_string ~ "\b(lipitor|phentermin|pro[sz]ac|sandyauer|tramadol|troyhamby)\b") {
  set $block_spam 1;
  }
  if ($block_spam = 1) {
  return 444;
  }
  set $block_user_agents 0;
  if ($http_user_agent ~ "Wget") {
  set $block_user_agents 1;
  }

Disable Akeeba Remote Control 2.5 and earlier
  if ($http_user_agent ~ "Indy Library") {
  set $block_user_agents 1;
  }

Common bandwidth hoggers and hacking tools.
  if ($http_user_agent ~ "libwww-perl") {
  set $block_user_agents 1;
  }
  if ($http_user_agent ~ "GetRight") {
  set $block_user_agents 1;
  }
  if ($http_user_agent ~ "GetWeb!") {
  set $block_user_agents 1;
  }
  if ($http_user_agent ~ "Go!Zilla") {
  set $block_user_agents 1;
  }
  if ($http_user_agent ~ "Download Demon") {
  set $block_user_agents 1;
  }
  if ($http_user_agent ~ "Go-Ahead-Got-It") {
  set $block_user_agents 1;
  }
  if ($http_user_agent ~ "TurnitinBot") {
  set $block_user_agents 1;
  }
  if ($http_user_agent ~ "GrabNet") {
  set $block_user_agents 1;
  }
  if ($block_user_agents = 1) {
  return 444;
  }
  

###end####  location ~ ^/list {
  #如果后端的服务器返回502、504、执行超时等错误,自动将请求转发到upstream负载均衡池中的另一台服务器,实现故障转移。
  proxy_next_upstream http_502 http_504 error timeout invalid_header;
  # proxy_cache cache_one;
  #对不同的HTTP状态码设置不同的缓存时间
  proxy_cache_valid  200 301 302 304 1d;
  #proxy_cache_valid  any 1d;
  #以域名、URI、参数组合成Web缓存的Key值,Nginx根据Key值哈希,存储缓存内容到二级缓存目录内
  proxy_cache_key $host$uri$is_args$args;
  proxy_set_header Host  $host;
  proxy_set_header X-Forwarded-For  $remote_addr;
  proxy_ignore_headers "Cache-Control" "Expires" "Set-Cookie";
  #proxy_ignore_headers Set-Cookie;
  #proxy_hide_header Set-Cookie;
  proxy_pass http://tomcat_pool;
  add_header      Nginx-Cache     "$upstream_cache_status  from  km";
  

  expires      1d;
  }
  

  #ssl(https)相关设置
  #server {
  #  listen 13820; #监听端口
  #  server_name localhost;
  #  charset utf-8; #gbk,utf-8,gb2312,gb18030 可以实现多种编码识别
  #  ssl on; #开启ssl
  #  ssl_certificate /ls/app/nginx/conf/mgmtxiangqiankeys/server.crt; #服务的证书
  #  ssl_certificate_key /ls/app/nginx/conf/mgmtxiangqiankeys/server.key; #服务端key
  #  ssl_client_certificate /ls/app/nginx/conf/mgmtxiangqiankeys/ca.crt; #客户端证书
  #  ssl_session_timeout 5m; #session超时时间
  #  ssl_verify_client on; # 开户客户端证书验证
  #  ssl_protocols SSLv2 SSLv3 TLSv1; #允许SSL协议
  #  ssl_ciphers ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP; #加密算法
  #  ssl_prefer_server_ciphers on; #启动加密算法
  #  access_log /lw/logs/nginx/dataadmin.test.com.ssl.access.log access ; #日志格式及日志存放路径
  #  error_log /lw/logs/nginx/dataadmin.test.com.ssl.error.log; #错误日志存放路径
  #}
  

# deny access to .htaccess files, if Apache's document root  
# concurs with nginx's one
  
#
  
#location ~ /\.ht {
  
#    deny  all;
  
#}
  

  }
  server {
  listen       80;
  server_name  bbs.yourdomain.com;
  location / {
  root /home/www/web/springmvc; #设定网站的资源存放路径
  index index.jsp index.htm index.html  index.do welcome.jsp;#设定访问的默认首页地址
  }
  

location ~ \.(jsp|jspx|dp)?$ #所有JSP的页面均交由tomcat处理  
{
  proxy_set_header  Host $host;
  proxy_set_header  X-Real-IP $remote_addr;
  proxy_pass http://tomcat_pool;#转向tomcat处理
  
}
  
#设定访问静态文件直接读取不经过tomcat
  
location ~ .*\.(htm|html|gif|jpg|jpeg|png|bmp|swf|ioc|rar|zip|txt|flv|mid|doc|ppt|pdf|xls|mp3|wma)$
  {
  expires  30d;
  }
  

  location ~ .*\.(js|css)?$
  {
  expires  1h;
  }
  
access_log  /usr/local/nginx/logs/ubitechztt.log main;#设定访问日志的存放路径
  

  
error_page   500 502 503 504  /50x.html;
  
location = /50x.html {
  root   html;
  
}
  

  }

another virtual host using mix of IP-, name-, and port-based configuration
  #
  #server {

listen       8000;

listen       somename:8080;

server_name  somename  alias  another.alias;

location / {

root   html;

index  index.html index.htm;

}
  #}
  }



运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.iyunv.com/thread-633415-1-1.html 上篇帖子: linux-nginx-2 下篇帖子: lnmp (nginx php-fpm mysql) 环境部署——nginx
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表