一文带你了解nginx基础 (4)

安装插件并重启

cd /usr/local/src/nginx-1.18.0 # 如果不是使用的默认路径,使用 --prefix 指定 ./configure --with-http_stub_status_module make && make install /usr/local/nginx/sbin/nginx -s quit /usr/local/nginx/sbin/nginx

访问地址,状态参数如下

Active connections:活跃的连接数量

server accepts handled requests:处理的总连接数 创建的握手数 处理的总请求数

reading:读取客户端的Header信息的次数。这个操作仅读取头部信息,完成后立即进入writing状态

writing:响应数据传到客户端的Header信息次数。这个操作不仅读取头部,还要等待服务响应

waiting:开启keep-alive后等候下一次请求指令的驻留连接

六、负载均衡 轮询 upstream myserver { # 默认所有服务器权重为 1 server 192.168.250.220:8080; server 192.168.250.221:8080; server 192.168.250.222:8080; } 加权轮询

性能更好的服务器权重应更高

upstream myserver { server 192.168.250.220:8080 weight=3; server 192.168.250.221:8080; # default weight=1 server 192.168.250.222:8080; # default weight=1 } 最少连接 upstream myserver { least_conn; # with default weight for all (weight=1) server 192.168.250.220:8080; server 192.168.250.221:8080; server 192.168.250.222:8080; } 加权最少连接

性能更好的服务器权重应更高

upstream myserver { least_conn; server 192.168.250.220:8080 weight=3; server 192.168.250.221:8080; # default weight=1 server 192.168.250.222:8080; # default weight=1 } IP Hash

算法:根据客户端ip进行Hash得到一个数值,然后使用该数值对服务器个数取模,得到的结果就是映射的服务器序号

(在服务器个数不变的情况下)可保证同一ip地址的请求始终映射到同一台服务器,解决了session共享问题

upstream myserver { ip_hash; # with default weight for all (weight=1) server 192.168.250.220:8080; server 192.168.250.221:8080; server 192.168.250.222:8080; } uri Hash

(在服务器个数不变的情况下)可保证同一uri始终映射到同一台服务器

nginx在1.7.2之后支持uri_hash

upstream myserver { hash $request_uri; # with default weight for all (weight=1) server 192.168.250.220:8080; server 192.168.250.221:8080; server 192.168.250.222:8080; } 七、access日志切割

新建Shell脚本

# 脚本文件路径随意 vim /usr/local/nginx/nginx_log.sh

将以下内容添加到脚本中

#! /bin/bash # 设置日志文件存放目录(nginx安装目录为/usr/local/nginx) LOG_HOME="/usr/local/nginx/logs" # 备份Log名称 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 /usr/local/nginx/logs/nginx.pid`

创建crontab定时作业

crontab -e

将以下内容添加到作业中去(任取一个)

corn表达式生成器:

# 以每分钟切割一次为例 */1 * * * * sh /usr/local/nginx/nginx_log.sh # 以每天切割一次为例 0 0 0 1/1 * ? sh /usr/local/nginx/nginx_log.sh 八、动静分离

概念:将动态请求和静态请求分开

实现方式:

(推荐)将静态文件存放在专门的服务器上,使用单独的域名

另一种是将动态和静态文件放在一起,使用nginx区分

以实现方式1为例

前提:将静态文件存放在代理服务器中

在ngnix中创建文件目录(如/usr/local/nginx/static),将所有静态文件发布到该目录中

在nginx.conf http server 中配置动静分离

server { location ~ .*\.(html|htm|gif|jpg|jpeg|bmp|png|ico|txt|js|css)$ { root /usr/local/nginx/static; # 缓存30天 expires 30d; } }

在实际的后台服务器中发布的程序中,使用静态文件时,路径指向设置为静态文件服务器(这里是代理服务器)

nginx.conf基础配置项 # 指定运行nginx的用户名 #user nobody; # 工作线程数,通常同cpu逻辑核心数一致 worker_processes 1; # 错误日志路径 最小级别 [ debug | info | notice | warn | error | crit ] #error_log logs/error.log; #error_log logs/error.log notice; #error_log logs/error.log info; # 指定进程的pid记录文件,记录当前运行的nginx的pid #pid logs/nginx.pid; # 网络连接模块 events { # 一个工作线程支持的最大并发连接数 worker_connections 1024; # keepalive超时时间,单位:秒 keepalive_timeout 60; } # 设定http服务器,利用它的反向代理功能提供负载均衡支持 http { # 设定支持的 mime 类型 include mime.types; # 默认 mime 类型 default_type application/octet-stream; # 设定日志格式,格式名为main ## $remote_addr:客户端的ip地址(若使用代理服务器,则是代理服务器的ip) ## $remote_user:客户端的用户名(一般为“-”) ## $time_local:访问时间和时区 ## $request:请求的url和请求方法 ## $status:响应HTTP状态码 ## $body_bytes_sent:响应body中的字节数 ## $http_referer:客户端是从哪个url来请求的 ## $http_user_agent:客户端用户使用的代理(一般为浏览器) ## $http_x_forwarded_for:客户端的ip地址(通过代理服务器记录客户端的ip地址) #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; # 指定 nginx 是否调用 sendfile 函数(zero copy 方式)来输出文件,对于普通应用,必须设为 on, # 如果用来进行下载等应用磁盘IO重负载应用,可设置为 off,以平衡磁盘与网络I/O处理速度,降低系统的uptime sendfile on; #tcp_nopush on; # keepalive 超时时长,单位:秒 #keepalive_timeout 0; keepalive_timeout 65; # 打开 gzip #gzip on; # 以上为 nginx 的全局设置,应用于所有 Web 应用 # 一个Web应用对应一个 server,内部配置仅针对该应用,优先级比全局的高 server { // 端口号 listen 80; // 域名,比如 server_name localhost; # 编码格式 #charset koi8-r; # 访问日志文件路径 #access_log logs/host.access.log main; # 一般路由导航到: location / { # 根目录为html root html; # 默认页为 index.html,如果没有则是 index.htm index index.html index.htm; } # 404时的展示页面 #error_page 404 /404.html; # 50X时的展示页面 # redirect server error pages to the static page /50x.html # error_page 500 502 503 504 /50x.html; location = /50x.html { root html; } # proxy the PHP scripts to Apache listening on 127.0.0.1:80 # #location ~ \.php$ { # proxy_pass ; #} # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000 # #location ~ \.php$ { # root html; # fastcgi_pass 127.0.0.1:9000; # fastcgi_index index.php; # fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name; # include fastcgi_params; #} # 禁止访问 .htxxx 的文件 # deny access to .htaccess files, if Apache's document root # concurs with nginx's one # #location ~ /\.ht { # deny all; #} } # 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; # } #} ############## HTTPS demo beign ############## # HTTPS server # #server { # listen 443 ssl; # server_name localhost; # ssl 证书文件位置 # ssl_certificate cert.pem; # ssl 证书key的位置 # ssl_certificate_key cert.key; # ssl_session_cache shared:SSL:1m; # ssl_session_timeout 5m; # 数字签名 MD5 # ssl_ciphers HIGH:!aNULL:!MD5; # ssl_prefer_server_ciphers on; # location / { # root html; # index index.html index.htm; # } #} ############### HTTPS demo end ############### ############ 反向代理 demo begin ############# # 设定实际的服务器列表(权重默认都是1) #upstream myserver{ # server 192.168.0.1:8089 weight=7; # server 192.168.0.2:8089 weight=3; #} #server { # listen 80; # server_name localhost; #反向代理的路径(和upstream绑定),location 后面设置映射的路径 # location / { # proxy_pass ; # } #} ############# 反向代理 demo end ############## }

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wsxjsd.html