nginx详解

概述

简介

Nginx是一款轻量级的Web服务器、反向代理服务器,专为性能优化而开发,使用异步非阻塞事件驱动模型

优点

1.开源软件,可以免费试用,并且可用于商业用途

2.内存消耗少,节省带宽,支持gzip压缩

3.可以高并发连接,官方测试能够支撑5万并发连接,在实际生产环境中可以支撑2到4万并发连接

4.内置的健康检查功能:如果Nginx proxy后端的某台服务器宕机了,不会影响前端访问

5.稳定性高:用于反向代理(负载均衡),宕机的概率微乎其微

6.支持热部署,在不间断服务的情况下,对软件版本升级

应用场景

HTTP服务器:部署只有静态资源的网站,可以通过异步请求接受数据

反向代理:作为代理服务器,连接网络请求并转发给内部网络的服务器

负载均衡:分摊到多个服务器上

动静分离:根据一定规则把不变的资源和经常变的资源区分开来

nginx目录详解

conf 存放配置文件

html 存放页面文件

index.html:访问Nginx时的首页

50x.html:错误提示页面

logs 存放 日志文件

刚安装完Nginx,从未启动过的话logs目录下什么都没有,只有启动Nginx后,才会出现以下三个文件

access.log:记录正常访问的服务日志(配置在http块)

error.log:错误日志(三块都可配置)

Nginx.pid:Nginx进程id(配置在全局块)

sbin 命令目录

docker安装

创建conf的挂载目录

mkdir -p /opt/nginx/conf

访问:cat /opt/nginx/conf/nginx.conf

修改:vim /opt/nginx/conf/nginx.conf

创建 html 的挂载目录

docker volume create nginx8020

访问:cd /var/lib/docker/volumes/nginx8020/_data

拉取镜像

docker pull nginx

初始化挂载目录的配置文件

docker run --rm --name nginx-short -p 8020:80 -d nginx

docker cp nginx-short:/etc/nginx/nginx.conf /opt/nginx/conf

docker stop nginx-short

创建容器

docker run --rm -d -p 8020:80 --name nginx8020 -v nginx8020:/usr/share/nginx/html -v /opt/nginx/conf/nginx.conf:/etc/nginx/nginx.conf nginx

修改docker中nginx的配置文件

docker exec -it nginx8024 /bin/bash

cat /etc/nginx/conf.d/default.conf

配置项

任意模块

引入配置文件

1.引入的文件要求运行Nginx进程的用户对其具有写权限

2.引入的文件要符合Nginx配置文件规定的相关语法和结构

示例:

include /etc/nginx/conf.d

全局块

配置错误日志的存放路径【全局块、http块和 server 块】

1.存放路径要求运行Nginx进程的用户对其具有写权限

示例:

error_log logs/error.log;#配置错误日志的存放路径

配置进程 PID 存放路径

#配置进程PID存放路径

pid logs/nginx.pid;

配置用户或者用户组访问Nginx进程的权限

1.不写的话所有用户都可以启动Nginx进程

示例:

#所有用户都可以启动Nginx进程

user nobody nobody;

配置Nginx进程允许生成worker process数

1.理论来说Nginx进程允许生成worker_process的值越大,可以支持的并发处理也越多

示例:

#Nginx进程允许生成worker process数为1

worker_processes 1;

#Nginx进程允许生成worker process数为1,Nginx进程将自动检测

worker_process 1 | auto;

events块

设置允许每一个worker process同时开启的最大连接数

#允许每一个worker process同时开启的最大连接数为1024

worker_connections 1024;

配置事件驱动模型

1.作用:强制Nginx服务器选择哪种事件驱动模型进行消息处理

2.事件驱动模型参数详解:

select、poll属于标准事件模型

Kqueue:使用于FreeBSD 4.1+, OpenBSD 2.9+, NetBSD 2.0 和 MacOS X.使用双处理器的MacOS X系统使用kqueue可能会造成内核崩溃

Epoll:使用于Linux内核2.6版本及以后的系统。

/dev/poll:使用于Solaris 7 11/99+,HP/UX 11.22+ (eventport),IRIX 6.5.15+ 和 Tru64 UNIX 5.1A+

Eventport:使用于Solaris 10。为了防止出现内核崩溃的问题,有必要安装安全补丁

示例:

#使用epoll标准事件模型

use epoll;

http块

定义网络资源的媒体类型

default_type application/octet-stream;#定义网络资源的媒体类型为application/octet-stream

自定义服务日志

1.作用:记录Nginx服务器提供服务过程应答前端请求的日志,Nginx服务器支持对服务日志的格式、大小、输出等进行配置

示例:

#自定义服务日志

access_log logs/access.log main;

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 /var/log/nginx/access.log main;

配置HTTP 长连接 超时时间【server块、HTTP块、location块中】

#在服务器端保持连接的时间设置为65s

keepalive_timeout 65;

#在服务器端保持连接的时间设置为120s,发给用户端的应答报文头部中Keep-Alive域的超时时间设置为100s

keepalive_timeout 120s 100s;

开启文件高效传输模式

1.可以结合tcp_nopush或tcp_nodelay进一步优化性能,但这两个参数只能选其一

示例:

#开启文件高效传输模式

sendfile on;

#当有数据时,先不着急发送,确保数据包已经装满数据,避免网络拥塞。

tcp_nodelay on;

#只在连接传输进入到keep-alive状态,在每次只发送很少字节的业务场景中,使用该功能可以避免等待时间过长。

tcp_nopush on;

配置 Gzip 压缩

1.作用:开启Gzip压缩功能,可以使网站的css、js、xml、html文件在传输时进行压缩,提高访问速度, 进而优化Nginx性能

将响应报⽂发送⾄客户端之前可以启⽤压缩功能,这能够有效地节约带宽,并提⾼响应⾄客户端的速度

示例:

gzip on;

gzip_min_length 1k;

gzip_buffers 4 16k;

gzip_http_version 1.1;

gzip_comp_level 9;

gzip_types text/plain application/x-javascript text/css application/xml text/javascript application/x-httpd-php application/javascript application/json;

gzip_disable "MSIE [1-6]\.";

gzip_vary on;

server块

配置网络监听

1.注意:如果是IPv6的地址,需要使用中括号"["括起来,比如[fe80::1]等。

示例:

#监听80端口上的所有IP连接

listen 80;

#监听192.168.1.10:8000上的连接

listen 192.168.1.10:8000;

#监听192.168.1.10所有端口上的连接

listen 192.168.1.10;

域名

1.作用:设置了虚拟主机的名称并配置好DNS,用户就可以使用这个名称向此虚拟主机发送请求了

2.优先级:精确匹配>左侧通配>右侧通配>正则表达式匹配

示例:

server_name localhost;

server_name *.*;#匹配所有

server_name www.baidu.com;#精确匹配www.baidu.com

server_name *.baidu.com;#通配.baidu.com

server_name www.baidu.com *baidu.com;#精确匹配www.baidu.com,通配.baidu.com

实现域名跳转

#域名test.com直接跳转到域名jkw.life

rewrite ^/(.*) http://jkw.life/$1 permanent;

location块

location匹配规则

location / {...}#无限制匹配

location = /abc {...}#精确匹配,如http://baidu.com/abc?p1

location ~ ^/abc$ {...}#正则匹配,区分大小写,如http://baidu.com/abc正确,http://baidu.com/ABC错误

location ~* ^/abc$ {...}#正则匹配,不区分大小写,如http://baidu.com/abc http://baidu..com/ABC正确

location ^~ /images/ {...}#匹配到即停止搜索

配置文件资源根目录路径

1.作用:当location块接收到/index.html的请求时,将在/usr/share/nginx/html目录下找到index.html响应请求

2.root和alias指令有区别

示例:

#文件资源放在/usr/share/nginx/html中

location / {

root /usr/share/nginx/html;

}

#对应磁盘映射路径/opt/nginx/html/images/images/1.jpg

location / {

root /opt/nginx/html/images;

}

#最后面一定要加 "/",对应磁盘映射路径/opt/nginx/html/images/1.jpg

location / {

alias /opt/nginx/html/images/;

}

配置默认访问的文件

1.作用:如果用户仅输入了类似于http://example.com/这样的URL而没有具体指定文件名,

Nginx会首先尝试查找index.html文件,如果该文件不存在,就会查找index.htm文件,并将其内容返回给用户

示例:

文件资源放在/usr/share/nginx/html中,若访问/路径会默认访问index.html页面

location / {

root /usr/share/nginx/html;

index index.html index.htm;

}

重定向

1.执行return指令后,location中后序指令将不会被执行

2.重定向时必须以http或者https开头的

#重定向到http://baidu.com

return http://baidu.com;

#返回响应码和文本,文本会在body中

return 200 'your success';

#用302表示临时性重定向,访问/时跳转返回状态码302并重定向到/bbs的路径上

location / {

return 302 /bbs;

}

location /bbs {

root html;

index index.html;

}

核心指令

if【server块或locatio块】

1.false的情况:空字符串、0开头的任意字符串

2.使用=(等于)和!=(不等于)比较变量和字符串是否相等

3.字符串不需要加引号

4.~【大小写敏感】~*【大小写不敏感】!~【】

示例:

$http_user_agent的值中是否包含MSIE字符串,包含为true

if ($http_user_agent ~ MSIE) {

...

}

#判断ip地址是否为192.168.66.10如果是返回test if ok in Url /serach

location /search {

if ($remote_addr = "192.168.66.10"){

return 200 "test if ok in url search"

}

}

#不允许谷歌浏览器访问,如果时候谷歌浏览器返回500

if ($http_user_agent ~ Chrome){

return 500;

}

set 指令

1.作用:该指令用于设置一个新的变量

2.要用符号$作为变量的第一个字符,且变量不能与Nginx服务器预设的全局变量同名

3.变量的值可以是字符串、其他变量或变量的组合等

示例:

set $id $1;

break 指令

1.作用:该指令用于中断当前相同作用域中的其他Nginx配置。

示例:

location / {

if ($slow){

set $id $1; # 处于break指令之前,配置生效

break;

limit_rate 10k; #处于break指令之后,配置无效

}

}

相关推荐
鲁正杰1 小时前
在一个服务器上抓取 Docker 镜像并在另一个服务器上运行
运维·服务器·docker
aherhuo1 小时前
基于openEuler22.09部署OpenStack Yoga云平台(一)
linux·运维·服务器·openstack
WebDeveloper20011 小时前
如何使用美国域名中心US Domain Center和WordPress创建商业网站
运维·服务器·css·网络·html
檀越剑指大厂2 小时前
【Linux系列】Shell 脚本中的条件判断:`[ ]`与`[[ ]]`的比较
linux·运维·服务器
2301_819287124 小时前
ce第六次作业
linux·运维·服务器·网络
CIb0la4 小时前
GitLab 停止为中国区用户提供 GitLab.com 账号服务
运维·网络·程序人生
m0_748247554 小时前
Web 应用项目开发全流程解析与实战经验分享
开发语言·前端·php
武汉联从信息4 小时前
如何使用linux日志管理工具来管理oracle osb服务器日志文件?
linux·运维·服务器
天天进步20154 小时前
STUN服务器实现NAT穿透
运维·服务器
PieroPc4 小时前
Python 自动化 打开网站 填表登陆 例子
运维·python·自动化