nginx-基础知识

2022/10/7 2:24:51

本文主要是介绍nginx-基础知识,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

一 反向代理

正向代理和反向代理的区别 – 正向代理:用户决定访问哪个服务器 – 反向代理:代理决定访问哪个服务器

二 nginx的进程模型解析

nginx采用单主进程,多子进程(nginx.conf worker_processes 默认为1)的模型,master管理worker,master接收外部请求或指令,分配给worker去执行,worker关闭时,会等待当前客户连接释放后,才会关闭,多进程虽然会带来额外的内存开销,采用多进程而不采用多线程的原因:

三 nginx处理web请求机制解析

nginx采用的是异步非阻塞,在Linux上默认使用epoll模型

四 nginx核心配置文件nginx.conf

4.1 user

设置worker进程的用户,指的是Linux的用户,会涉及到nginx操作目录或文件的一些权限,默认为nobody

user root;

4.2 worker_processes

worker进程工作数设置,一般来说CPU有几个,就设置几个,或者设置为N-1也行

worker_processes 1;

4.3 nginx日志级别

nginx日志级别debug|info|notice|warn|error|erit|alert|emerg错误级别从左到右越来越大。

4.4 pid

设置nginx进程pid

pid logs/nginx.pid

4.5 设置工作模式

events {
          
   
	# 默认使用epoll
	use epoll;
	# 每个worker允许连接的客户端最大连接数
	worker_connections 10240;
}

4.6 http

http是指令块,针对http网络传输的一些指令配置

http {
          
   
}

4.7 include

include引入外部配置,提高可读性,避免单个配置文件过大

include mime.types;

4.8 设置日志格式

参数名 参数意义 $remote_addr 客户端IP $remote_user 远程客户端用户名,一般为:’-’ $time_local 时间和时区 $request 请求的URL及method $status 响应状态码 $body_bytes_send 响应客户端内容字节数 $http_referer 记录用户从哪个链接跳转过来的 $http_user_agent 用户所使用的代理,一般来时都是浏览器 $http_x_forwarded_for 通过代理服务器来记录客户端的IP

4.9 sendfile

sendfile使用高效文件传输,提升传输性能。启用后才能使用tcp_nopush,是指当数据表积累一定大小后才发送,提高了效率。

sendfile on;
tcp_nopush no;

4.10 keepalive_timeout

keepalive_timeout设置客户端与服务端请求的超时时间,保证客户端多次请求的时候不会重复建立新的连接,节约资源损耗。

keepalive_timeout 65;

4.11 gzip

gzip启用压缩,html/js/css压缩传输后会更快

gzip on;
#限制最小压缩,小于1字节的文件不会压缩
gzip_min_length 1;
#定义压缩的级别(压缩比取值范围1-9,值越大,压缩比越大,文件越大,压缩越多,但是cpu使用会越多)
gzip_comp_level 3;
#定义压缩文件的类型
gzip_types text/plain application/javascript application/x-javascript text/css application/xml text/javascript application/x-httpd-php image/jpeg  image/gif  image/png application/json;

4.12 server

server可以在http指令块中设置多个虚拟主机

  • listen 监听端口 server_name localhost,ip,域名 location 请求路由映射,匹配拦截 root 请求位置 index 首页设置
server {
          
   
	listen 88;
	server_name localhost;
	
	location / {
          
   
		root html;
		index index.html index.htm
	}
}

五 nginx.pid打开失败以及失效的解决办法

  • nginx.pid读取失败:将目录重新创建一下
  • pid无效:./nginx -c nginx.conf (重新指定一下nginx.conf) nginx默认的pid是放在logs之下的;也可以在logs目录下创建默认的pid文件

六 nginx常用命令解析

6.1 快速停止nginx

# 该命令会立刻关掉nginx,即使有客户端在和服务器连接
./nginx -s stop

6.2 优雅关闭nginx

# 等待所有连接(http请求)都关闭后再停止nginx
./nginx -s quit

6.3 检查nginx.conf配置文件是否正常

./nginx -t

6.4 查看nginx当前版本号

./nginx -v
# 展示nginx当前版本号
./nginx -V
# 展示nginx更详细的版本信息

6.5 帮助

./nginx -h
./nginx -?

6.6 指定一个特定的nginx核心配置文件

./nginx -c

(可能会有多种不同类型配置文件, 可以使用-c 为当前切换指定配置文件 类似 dev.yml/prod.ym)

七 nginx日志切割

7.1 nginx日志切割-手动

① 创建一个shell可执行的文件cut_my_log.sh

#!/bin/bash
LOG_PATH="/var/log/nginx/"
RECORD_TIME=$(date -d "yesterday" +%Y-%m-%d+%H:%M)
PID=/var/run/nginx/nginx.pid
mv ${LOG_PATH}/access.log ${LOG_PATH}/access.${RECORD_TIME}.log
mv ${LOG_PATH}/error.log ${LOG_PATH}/error.${RECORD_TIME}.log

#向Nginx主进程发送信号,用于重新打开日志文件
kill -USR1 `cat $PID`

② 为cut_my_log.sh添加权限

chmod +x cut_my_log.sh

③ 测试日志切割后的结果

./cut_my_log.sh

7.2 nginx日志切割-定时

① 安装定时任务

yum install crontabs

② crontab -e 编辑并且添加一行新的任务;

*/1 * * * * /usr/local/nginx/sbin/cut_my_log.sh

③ 重启定时任务:

service crond restart
  • 附:常用定时任务命令:
service crond start         //启动服务
service crond stop          //关闭服务
service crond restart       //重启服务
service crond reload        //重新载入配置
crontab -e                  // 编辑任务
crontab -l                  // 查看任务列表

定时任务表达式: cron表达式是,分为5或6个域,每个域代表一个含义,如下所示:

分 时 日 月 星期几 年(可选) 取值范围 0-59 0-23 1-31 1-12 1-7 2019/2020/2021

常用表达式:

  • 每分钟执行:
*/1 * * * *
  • 每日凌晨(每天晚上23.59)执行
* * *
  • 每日凌晨一点执行
* * *

八 虚拟主机-nginx访问静态资源

静态资源分为两类: html/css/js 视频,音频,图片

8.1 首先将资源复制到Linux(例如在/home下)

8.2 然后在nginx.conf里面配置server

server {
          
   
	listen 90;
	server_name localhost;
	location / {
          
   
		root /home/foodie-shop
		index index.html
	}

	location /imooc {
          
   
	# root 使用时是拼接上面的,例如: /home/imooc
		root /home
	}

	location /static {
          
   
	# alias 使用时上面的是下面的别名,例如访问/home/imooc目录下的内容,可以使用/static
		alias /home/imooc
	}
}

8.3 location的匹配规则

  • 空格,默认匹配
location / {
          
   
	root /home/foodie-shop
	index index.html
}
  • “=”精准匹配
location = /imooc/img/face1.png {
          
   
    root /home;
}
  • “~*” 匹配正则表达式,不区分大小写
#符合图片的显示
location ~* .(GIF|jpg|png|jpeg) {
          
   
    root /home;
}
  • “~” 匹配正则表达式,区分大小写
#GIF必须大写才能匹配到
location ~ .(GIF|jpg|png|jpeg) {
          
   
    root /home;
}
  • “^~” 以某个字符路径开头,只能访问这个路径下的内容
location ^~ /imooc/img {
          
   
    root /home;
}


这篇关于nginx-基础知识的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!


扫一扫关注最新编程教程