Nginx调优二:调优和其他功能

nginx调优

调优主要是对nginx.conf文件进行调优。文件上的参数代表什么含义上一篇已经讲过,很多参数调优上一篇也进行了修改,只是并没有点明。现在来汇总一下

  1. 设置工作进程数 worker_processes 8; 根据服务器的cpu来配置。一般为一般为 Cpu 核心*2
  2. 日志优化,一般来说不会进行全局日志数据(全局配置里面的error_log),就算需要输出也是输出错误的日志。
  3. 指定nginx的运行模式。在events 模块中指定use epoll 。nginx的运行模式有select、poll、kqueue、epoll、rtsig和/dev/poll。其中select和poll都是标准的工作模式,kqueue和epoll是高效的工作模式,不同的是epoll用在Linux平台上,而kqueue用在BSD系统中,对于Linux系统,epoll工作模式是首选。
  4. 优化nginx最大连接数。 最大客户端连接数由worker_processes和worker_connections决定,即Max_clients=worker_processes*worker_connections,在作为反向代理时,Max_clients变为:Max_clients = worker_processes * worker_connections/4。 进程的最大连接数受Linux系统进程的最大打开文件数限制,在执行操作系统命令ulimit -n 65536worker_connections的设置才能生效。
  5. http模块优化。一般使用默认的日志模式即可,根据实际情况设置好连接超时时间。一般keepalive_timeout 65;即可。
  6. 尽量只用nginx做转发,减少在nginx上调用。比如动静分离,静态资源也可以交给其他的服务器来做,nginx只做转发上的处理,那么nginx的性能就会达到最高效。

镜像服务器

Nginx的镜像服务器作用是直接把静态文件在本地硬盘创建并读取,类似于七牛或者又拍这样的镜像CDN功能,首次访问会自动获取源站的静态图片等文件,之后的访问就是直接从CDN服务器读取,加快了速度。
镜像服务器的配置参数:

#启用缓存到本地的功能
proxy_store on; 
#表示用户读写权限,如果在error中报路径不允许访问的话就用"chomod -R a+rw"将下面配置的路径改 为相应的权限. 
proxy_store_access user:rw group:rw all:rw;
#此处为文件的缓存路径,这个路径是和url中的文件路径一致的
proxy_temp_path 缓存目录;
#在上面的配置之后,虽然文件被缓存到了本地磁盘上,但每次请求仍会向远端拉取文件,为了避免去远端 拉取文件,还必须增加:
 if ( !-e $request_filename) {
  proxy_pass http://192.168.10.10; 
 }
#注:"!-e $request_filename"正则表达式,匹配缓存目录中的文件与源文件是否存在。 
#"http://192.168.10.10" 源服务器的地址,默认端口80,如监听其他端口,此处要指出,例如4000端 口,http://192.168.10.10:4000

整体配置如下(修改nginx的配置文件nginx.conf):

#这里的location是要换成自己经过精确匹配的location, 
location ~*\.(gif|jpg|jepg|png|bmp)$ { 
  expires 3d; #所有链接,浏览器缓存过期时间为3天 
  proxy_set_header Accept-Encoding ''; 
  root /home/mpeg/nginx; #此目录为服务器的根目录,下面的if语句就是判断此目录 下是否有响应的文件 
  proxy_store on; #表示开启缓存 
  proxy_store_access user:rw group:rw all:rw;#表示用户读写权限 
  proxy_temp_path /home/mpeg/nginx; #此处为文件的缓存路径,这个路径root配置的路径一致的 
  if ( !-e $request_filename) { 
    proxy_pass http://192.168.0.1; #此处为要被代理的服务器的地址 
  } 
}

整个过程就是第一次访问图片、文件等静态资源获取访问http://192.168.0.1这个地址,然后后续静态资源的访问会直接从nginx服务器中的/home/mpeg/nginx路径去判断。如果有就直接返回该资源。如果没有就从http://192.168.0.1服务器拿。
关键在于location 后面的路径判断和匹配好你对应的静态资源。

nginx 高可用和热备部署

用nginx做负载均衡,作为架构的最前端或中间层,随着日益增长的访问量,需要给负载均衡做高可用架构,利用keepalived解决单点风险,一旦nginx宕机能快速切换到备份服务器。
准备两个nginx服务器 两个服务器都要下载keepalived。这里不重点描述keepalived,简单带过。

  1. 两个台服务器都要下载keepalived。yum install keepalived pcre-devel -y
  2. 修改配置文件 下载完成后keepalived在 /etc/keepalived 下。可以通过find / -name keepalived.conf 查找
    在这里插入图片描述
    先备份keepalived.conf配置文件,然后修改配置文件只留下
global_defs {
   vrrp_garp_interval 0
   vrrp_gna_interval 0
}
vrrp_instance VI_1 {
    state MASTER
    interface ens33
    virtual_router_id 51
    priority 100
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        192.168.2.120
    }
}
  1. 在另一台服务器也是按照2的操作。不过配置文件将state MASTER 改为 BACKUP ,priority 100 参数 比主机低就可以了 。另一台的配置
global_defs {
   notification_email {
   vrrp_garp_interval 0
   vrrp_gna_interval 0
}

vrrp_instance VI_1 {
    state BACKUP
    # 根据ifconfig看查看ip地址是在ens33上还是在 eth0  等等 该服务器ip在ens33上
    interface ens33
    virtual_router_id 51
    priority 50
    advert_int 1
    authentication {
    #认证的信息要和另一台服务器相同
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
    #虚拟ip要根据两台服务器的网段配置,并且两台服务器配置要相同
        192.168.2.120
    }
}

我两台服务器地址分别是192.168.2.110、192.168.2.111 ,配置的虚拟ip为 192.168.2.120
4. 测试高可用
启动nginx和keepalived service keepalived start 启动之后 两个服务器都ping 虚拟的ip,能通说明keepalived 虚拟ip配置成功
然后访问192.168.2.120 就会根据keepalived 的配置转到主机去。
nginx 服务器
在这里插入图片描述
另一台nginx 服务器
在这里插入图片描述
访问虚拟ip
在这里插入图片描述
这里nginx+keepalived 就完成。

** 热备部署**
热备部署就是说当我们要部署项目时,如果改动的内容不影响主要的业务流程,不想停止服务,可以采用这样的方式:停止主服务器去更新部署项目,备用服务器继续提供服务,等待主服务器部署完成后,在停止备用服务器部署项目。
之前说到负载均衡的时候用到了 upstream 配置,热备部署也是用到了upstream 配置

upstream weightdemo { 
server localhost:10001 weight=1; 
server localhost:10002 weight=2; 
}

那么如果想把10001作为主机 ,10002作为备份 将上面配置改为

upstream weightdemo { 
server localhost:10001 ; 
server localhost:10002 backup; 
}

那么只要10001还能提供服务,10002就不会提供服务。
如果10001需要部署项目时,由于10001暂时不能提供服务,10002就会提供服务,等待10001恢复。10001 部署成功后就可以部署10002。

安全认证

在这里插入图片描述
该模块可以使你使用用户名和密码基于 HTTP 基本认证方法来保护你的站点或其部分内容。
要是用这个模块首先要创建一个密码。
密码支持以下类型

  • 使用crypt()函数加密。可以使用Apache Http Server发行版中的“htpasswd”实用程序或“openssl passwd”命令生成。
  • 使用基于MD5的密码算法(apr1)的Apache变体进行散列;可以使用相同的工具生成。
  • 由RFC2307中描述的"{scheme}data"语法(1.0.3+)指定。当前实现方案包括文本(用于示例,不应使用)、SHA(1.3.13)(SHA-1哈希文本,不应使用)、SSHA(SHA-1加盐哈希,被OpenLDAP、Dovecot等软件包使用)。

htpasswd 生成密码文件
htpasswd是开源Http服务器Apache Http Server的一个命令工具,所以本机如果没有该命令,需要先安装。
yum install httpd-tools -y
htpasswd指令用来创建和更新用于基本认证的用户认证密码文件。htpasswd指令必须对密码文件有读写权限,否则会返回错误码。
htpasswd参数列表:

参数参数说明
-b密码直接写在命令行中,而非使用提示输入的方式
-c创建密码文件,若文件存在,则覆盖文件重新写入
-n不更新密码文件,将用户名密码进行标准输出
-m使用MD5算法对密码进行处理
-d使用CRYPT算法对密码进行处理
-s使用SHA算法对密码进行处理
-p不对密码进行加密处理,使用明文密码
-D从密码文件中删除指定用户记录

htpasswd生成Nginx密码文件:htpasswd -bc /usr/local/openresty/nginx/conf/passwordnginx Securitit 12345678
在这里插入图片描述
这样就表示密码生成成功,对应文件目录下就有该密码文件。查看密码文件Securitit:$apr1$YTtMWb7P$hH.nFDm6lBNlQs98syy6t/
Securitit 就是用户名 后面一串就是密码。
若要在已有Nginx密码文件中追加用户,则无需-c参数
nginx配置文件配置
在location处加上两个参数

location  /  {
 auth_basic            "Restricted";
 auth_basic_user_file  conf/htpasswd;
}

案例配置
在这里插入图片描述
重新启动nginx,进行访问。

在这里插入图片描述
这时候就要输入用户名和密码

在这里插入图片描述

一些参数含义的补充

代理相关参数

# 代理服务
proxy_pass;
# 是否允许重定向
proxy_redirect off; 
 # 传 header 参数至后端服务
proxy_set_header Host $host;
# 设置request header 即客户端IP 地址
proxy_set_header X-Forwarded-For $remote_addr; 
# 连接代理服务超时时间
proxy_connect_timeout 90; 
# 请求发送最大时间
proxy_send_timeout 90; 
# 读取最大时间
proxy_read_timeout 90; 
proxy_buffer_size 4k; 
proxy_buffers 4 32k; 
proxy_busy_buffers_size 64k; 
proxy_temp_file_write_size 64k;

镜像服务器相关参数

1.Nginx 静态缓存基本配置
在http元素下添加缓存区声明。

#proxy_cache_path 缓存路径
#levels 缓存层级及目录位数
#keys_zone 缓存区内存大小
#inactive 有效期
#max_size 硬盘大小
proxy_cache_path /data/nginx/cache_item levels=1:2 
keys_zone=cache_item:500m inactive=20d max_size=1g;

2.为指定location 设定缓存策略。

# 指定缓存区
proxy_cache cache_item; 
#以全路径md5值做做为Key 
proxy_cache_key $host$uri$is_args$args; 
#对不同的HTTP状态码设置不同的缓存时间
proxy_cache_valid 200 304 12h;

3.缓存的清除:
该功能可以采⽤第三⽅模块 ngx_cache_purge 实现。 为nginx 添加 ngx_cache_purge 模块

#下载ngx_cache_purge 模块包 
wget http://labs.frickle.com/files/ngx_cache_purge-2.3.tar.gz
#查看已安装模块
./sbin/nginx -V 
#进入nginx安装包目录 重新安装 --add-module为模块解压的全路径
./configure --prefix=/root/svr/nginx --with-http_stub_status_module -- with-http_ssl_module --add-module=/root/svr/nginx/models/ngx_cache_purge- 2.0 7 
#重新编译
make 
#拷贝 安装目录/objs/nginx 文件用于替换原nginx 文件
#检测查看安装是否成功
11 nginx -t

4.清除配置:

location ~ /clear(/.*) {
#允许访问的IP
allow 127.0.0.1; 4 
allow 192.168.0.193; 
#禁止访问的IP 
deny all;
#配置清除指定缓存区和路径(与proxy_cache_key一至)
proxy_cache_purge cache_item $host$1$is_args$args; 
} 
#配置好以后 直接访问服务生成缓存文件,在访问清楚缓存的路径,清除生成的缓存,如果指定缓存不存在 则会报404 错误。
 http://www.luban.com/clear/?a=1


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
当涉及到Nginx和JVM的调优时,我们可以从两个方面来讨论。 首先是Nginx调优Nginx是一个高性能的Web服务器和反向代理服务器,以下是一些常见的Nginx调优方法: 1. 调整worker_processes和worker_connections:根据服务器的硬件配置和负载情况,适当调整worker_processes(工作进程数)和worker_connections(每个工作进程的最大连接数)参数,以提高并发处理能力。 2. 启用gzip压缩:开启gzip压缩可以减小传输的数据量,提高网站的响应速度。 3. 调整缓冲区大小:通过调整proxy_buffer_size、proxy_buffers和proxy_busy_buffers_size等参数,可以优化Nginx对后端服务器的请求和响应的缓冲区管理,提高性能。 4. 使用缓存:使用Nginx的缓存功能可以减轻后端服务器的负载,提高响应速度。可以通过配置proxy_cache和相关参数来启用缓存。 5. 负载均衡:通过配置upstream模块,可以实现Nginx的负载均衡功能,将请求分发到多个后端服务器上,提高系统的可用性和性能。 接下来是JVM的调优。JVM是Java虚拟机的缩写,以下是一些常见的JVM调优方法: 1. 调整堆内存大小:通过调整-Xms和-Xmx参数,可以设置JVM的初始堆大小和最大堆大小,以适应应用程序的内存需求。 2. 设置垃圾回收器:根据应用程序的特点和性能需求,选择合适的垃圾回收器,如Serial GC、Parallel GC、CMS GC或G1 GC,并通过相关参数进行配置。 3. 调整线程数:通过调整-Xss参数,可以设置线程栈的大小,以及通过调整-XX:ParallelGCThreads参数来设置并行垃圾回收线程数,以提高并发处理能力。 4. 监控和分析工具:使用JVM提供的监控和分析工具,如jstat、jconsole、jvisualvm等,可以实时监控JVM的运行状态和性能指标,帮助定位性能瓶颈和优化机会。 5. 代码优化:通过对代码进行优化,如减少对象的创建、避免过多的同步、合理使用缓存等,可以减少JVM的负载,提高性能。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值