nginx的安装和使用

nginx的安装和使用

安装nginx

  1. (可选) su回车,输入密码,取得管理员权限。(不操作此步骤,可以使用sudo执行命令)
  2. 更新apt     sudo apt update
  3. 安装nginx sudo apt install nginx

nginx安装目录介绍

通过 whereis nginx 查找nginx安装目录,一般在/usr/local/nginx

html:nginx错误页面和欢迎页面
log:访问日志、错误日志、nginx主进程pid文件
sbin:可执行文件,启动停止命令等
conf:配置文件
*_temp:共五个,存放临时文件

nginx启停命令

  1. 进入到nginx/sbin目录              cd /usr/local/nginx/sbin
  2. 启动nginx                                 ./nginx
  3. 强制关闭nginx                          ./nginx -s stop
  4. 待所有请求结束后关闭nginx    ./nginx -s quit
  5. 重启nginx                                 ./nginx -s reload

Nginx配置文件详解

  1. 核心模块:
    • HTTP模块(代理、缓存、日志定义和第三方模块)
    • EVENTS模块(网络连接)
    • 全局模块(全局日志、日志路径、PID路径、用户信息等)
  2. 基础模块:
    • HTTP全局模块
    • HTTP FastCGI模块
    • HTTP Gzip模块
    • HTTP server模块(虚拟主机,一个http可以由多个server)
    • HTTP location模块(请求的路由,各种页面的处理)
    • HTTP Rewrite模块
  3. 第三方模块:
    • HTTP Upstream Request Hash模块
    • Notice模块
    • HTTP Access Key模块

nginx代理模式

    1)正向代理
    2)反向代理
    3)透明代理

nginx集群

流程图
在这里插入图片描述

负载均衡策略

  1. 轮询(默认)
    upstream localhost {
    	server 192.168.134.33:8081 weight = 1;
    	server 192.168.134.34:8081 weight = 1;
    }
    
  2. **加权轮询 **
    upstream localhost {
    	server 192.168.134.33:8081 weight = 1;
    	server 192.168.134.34:8081 weight = 3;
    }
    
  3. 源地址哈希法:根据客户端ip求hash取模,同一个ip的请求会转发到固定的服务器,解决session问题。
    upstream localhost {
    	ip_hash;
    	server 192.168.134.33:8081;
    	server 192.168.134.34:8081;
    }
    
  4. 最小连接数法
    upstream localhost {
    	least_conn;
    	server 192.168.134.33:8081;
    	server 192.168.134.34:8081;
    }
    
  5. fair:nginx默认不支持,需要安装upsteram_fair模块。可以根据页面大小和加载时间长短智能地进行负载均衡,也就是根据后端服务器的响应时间来分配请求,响应时间短的优先分配。
    upstream localhost {
    	fair;
    	server 192.168.134.33:8081;
    	server 192.168.134.34:8081;
    }
    
  6. url_hash:nginx默认不支持,需要安装Nginx的hash软件包。按访问的URL的哈希结果来分配请求,使每个URL定向到一台后端服务器。
    upstream localhost {
    	hash $request_uri;
    	server 192.168.134.33:8081;
    	server 192.168.134.34:8081;
    }
    

日志管理

  1. nginx日志默认路径为 logs/access.log
  2. 默认格式为 main:
    log_format main '\$remote_addr - \$remote_user [\$time_local] "\$request" '
    				\$status \$body_bytes_sent "\$http_referer" '
    				'"\$http_user_agent" "\$http_x_forwarded_for"';
    
  • $remote_addr: 客户端的ip地址(代理服务器,显示代理服务ip)
  • $remote_user: 用于记录远程客户端的用户名称(一般为“-”)
  • $time_local: 用于记录访问时间和时区
  • $request: 用于记录请求的url以及请求方法
  • $status: 响应状态码,例如:200成功、404页面找不到等。
  • $body_bytes_sent: 给客户端发送的文件主体内容字节数
  • $http_user_agent: 用户所使用的代理(一般为浏览器)
  • $http_x_forwarded_for: 可以记录客户端IP,通过代理服务器来记录客户端的ip地址
  • $http_referer: 可以记录用户是从哪个链接访问过来的

日志切割

  1. 创建一个切割脚本 vi /opt/nginx/nginx_log.sh

    #!/bin/bash
    #设置日志文件存放目录
    LOG_HOME="/opt/nginx/logs/"
    #备分文件名称
    LOG_PATH_BAK="$(date -d yesterday +%Y%m%d%H%M)".access.log
    #重命名日志文件
    mv ${LOG_HOME}/access.log ${LOG_HOME}/${LOG_PATH_BAK}.log
    #向nginx主进程发信号重新打开日志
    kill -USR1 `cat /opt/nginx/logs/nginx.pid`
    
  2. 创建一个定时任务。

    crontab -e
    
  3. 一分钟一次

    */1 * * * * sh /opt/nginx/nginx_log.sh
    
  4. 启动定时任务

    service crond restart
    

动静分离

  1. 一种是纯粹把静态文件独立成单独的域名,放在独立的服务器上,也是目前主流推崇的方案
  2. 一种是动态跟静态文件混合在一起发布,通过nginx 来分开
  3. nginx.conf中的server模块增加如下配置:
    location = / {
    	proxy_passhttp://tomcat:8080/index
    }
    
    location ^~ /static/ {
    	root /webroot/res/;
    }
    
    location ~* \.(gif|jpg|jpeg|png|css|js|ico)${
    	root /webroot/res/;
    }
    

高并发配置

  1. 如何提高系统并发能力?

    1. 垂直拓展:提高单机硬件性能或单机架构性能。
    2. 水平拓展:   增加集群机器数量
  2. 高并发下nginx配置限流

    1. limit_conn_zone (客户端限流)
    http{
    	limit_conn_zone $binary_remote_addr zone=one:10m;
    	server
    	{
    		......
    		limit_conn one 10;
    		......
    	}
    }
    
    • 其中“limit_conn one 10”既可以放在server层对整个server有效,也可以放在location中只对单独的location有效
    • 该配置表明:客户端的并发连接数只能是10个

    1. limit_req_zone (客户端限流)
    http{
    	limit_req_zone $binary_remote_addr zone=req_one:10m rate=1r/s;
    	server
    	{
    		......
    		limit_req zone=req_one burst=120;
    		......
    	}
    }
    
    • 其中“limit_req zone=req_one burst=120”既可以放在server层对整个server有效,也可以放在location中只对单独的location有效
    • rate=1r/s的意思是每个地址每秒只能请求一次,也就是说令牌桶burst=120一共有120块令牌,并且每秒钟只新增1块令牌,120块令牌发完后,多出来的请求就会返回503

    1. ngx_http_upstream_module (后端限流,推荐)
    upstream xxxx{
    	server 127.0.0.1:8080 max_conns=10;
    	server 127.0.0.1:8081 max_conns=10;
    }
    
  3. 并发测试工具 ab

    1. 安装
    ubuntu:
    apt-get install apache2-utils
    centos:
    yum install httpd-tools -y
    
    1. 使用
    # 10个用户,1000个请求
    ab -c 10 -n 1000 http://www.test.com/
    
  4. 高并发下的nginx安全配置

    1. 版本安全,隐藏nginx版本号
    http { 
    	server_tokens off;
    }
    
    1. ip安全,白名单和黑名单设置
    # 白名单配置
    location / {
    	allow 192.168.136.123;
    	deny all;
    }
    # 黑名单设置
    location / {
    	deny 192.168.136.123;
    	allow all;
    }
    
    1. 文件安全
      访问路径为logs时,列表展示/opt/nginx/logs/下的所有log或txt结尾的文件
    location /logs {
    	autoindex on;
    	root /opt/nginx/;
    }
    location ^/logs~*\.(log|txt)$ {
    	add_header Content-Type text/plain;
    	root /opt/nginx/;
    }
    
    1. 连接安全,开启https

  5. Nginx配置进程数、并发数、系统优化

    1. 调整Nginx的主配置文件,增加并发量
    worker_processes 1; #调整到与CPU数量一致
    events {
    worker_connection 1024; #每个worker最大并发连接数,进程数*1024
    }
    
    1. 调整内核参数
    # 查看所有的属性值
    ulimit -a
    # 临时设置硬限制
    ulimit -Hn 100000 
    # 临时设置软限制
    ulimit -Sn 100000 
    
    # 修改配置文件,永久设置软硬限制
    vim /etc/security/limits.conf
    ...
    * 					soft 					nofile 					100000
    * 					hard 				    nofile 					100000
    用户/组		      软/硬限制		        需要限制的项目		        限制的值
    

  1. 长连接配置keepalive_timeout
  2. 高并发下nginx压缩
    #gzip模块设置
    #开启压缩
    gzip on;
    # 设置允许压缩的页面最小字节数,页面字节数从header头得content-length中进行获取。
    默认值是0,不管页面多大都压缩。建议设置成大于2k的字节数,小于2k可能会越压越大。
    gzip_min_length 2k;
    # 设置系统获取几个单位的缓存用于存储gzip的压缩结果数据流。 例如 4 4k 代表以4k为单
    位,按照原始数据大小以4k为单位的4倍申请内存。 4 8k 代表以8k为单位,按照原始数据大小以8k
    为单位的4倍申请内存。
    # 如果没有设置,默认值是申请跟原始数据相同大小的内存空间去存储gzip压缩结果。
    gzip_buffers 4 16k;
    #压缩级别,1-10,数字越大压缩的越好,也越占用CPU时间
    gzip_comp_level 5;
    # 默认值: gzip_types text/html (默认不对js/css文件进行压缩)
    # 压缩类型,匹配MIME类型进行压缩
    # 不能用通配符 text/*
    # (无论是否指定)text/html默认已经压缩
    # 设置哪压缩种文本文件可参考 conf/mime.types
    gzip_types text/plain application/xjavascript
    text/css application/xml;
    # 值为1.0和1.1 代表是否压缩http协议1.0,选择1.0则1.0和1.1都可以压缩
    gzip_http_version 1.0
    # IE6及以下禁止压缩
    gzip_disable "MSIE [1-6]\.";
    # 默认值:off
    # Nginx作为反向代理的时候启用,开启或者关闭后端服务器返回的结果,匹配的前提是后端服
    务器必须要返回包含"Via"的 header头。
    # off - 关闭所有的代理结果数据的压缩
    # expired - 启用压缩,如果header头中包含 "Expires" 头信息
    # no-cache - 启用压缩,如果header头中包含 "Cache-Control:no-cache" 头信息
    # no-store - 启用压缩,如果header头中包含 "Cache-Control:no-store" 头信息
    # private - 启用压缩,如果header头中包含 "Cache-Control:private" 头信息
    # no_last_modified - 启用压缩,如果header头中不包含 "Last-Modified" 头信息
    # no_etag - 启用压缩 ,如果header头中不包含 "ETag" 头信息
    # auth - 启用压缩 , 如果header头中包含 "Authorization" 头信息
    # any - 无条件启用压缩
    gzip_proxied expired no-cache no-store private auth;
    # 给CDN和代理服务器使用,针对相同url,可以根据头信息返回压缩和非压缩副本
    gzip_vary on;
    
  3. 高并发下nginx状态监控
    1. 插件安装:./configure --prefix=/opt/nginx/ --with-http_stub_status_module
    2. 设定Nginx状态访问地址
    location /NginxStatus {
    	stub_status on;
    	access_log off;
    }
    
    1. 查看Nginx并发进程数:ps -ef|grep nginx | wc -l
    2. 查看Web服务器TCP连接状态:netstat -n | awk ‘/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}’
    3. 高并发下Nginx整合方案
      在这里插入图片描述
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值