论坛
潜水/灌水快乐,沉淀知识,认识更多同行。
ToB圈子
加入IT圈,遇到更多同好之人。
朋友圈
看朋友圈动态,了解ToB世界。
ToB门户
了解全球最新的ToB事件
博客
Blog
排行榜
Ranklist
文库
业界最专业的IT文库,上传资料也可以赚钱
下载
分享
Share
导读
Guide
相册
Album
记录
Doing
搜索
本版
文章
帖子
ToB圈子
用户
免费入驻
产品入驻
解决方案入驻
公司入驻
案例入驻
登录
·
注册
只需一步,快速开始
账号登录
立即注册
找回密码
用户名
Email
自动登录
找回密码
密码
登录
立即注册
首页
找靠谱产品
找解决方案
找靠谱公司
找案例
找对的人
专家智库
悬赏任务
圈子
SAAS
ToB企服应用市场:ToB评测及商务社交产业平台
»
论坛
›
软件与程序人生
›
后端开发
›
.Net
›
第59篇 Nginx详细教程
第59篇 Nginx详细教程
立聪堂德州十三局店
金牌会员
|
2024-12-4 21:48:44
|
显示全部楼层
|
阅读模式
楼主
主题
786
|
帖子
786
|
积分
2358
1.Nginx简介
Nginx是⽬前最流⾏的Web服务器,最开始是由⼀个叫做igor的俄罗斯的步调员开发的,2019年3⽉11⽇被美国的F5公司以6.7亿美元的代价收购,现在Nginx是F5公司旗下的⼀款产品了。
2.Nginx的版本
Nginx开源版本重要分为两种,⼀种是稳固版,⼀种是主线版。
主线版(mainline):主线版是最新的版本,功能会⽐较多,会包罗⼀些正在开发中的体,验性模块功能,但是也大概会有⼀些新的bug。
稳固版(Stable):稳固版是经过⻓时间测试的版本,不会有太多的bug,也不会包罗⼀些新的功能。
3.Nginx安装(预编译二进制包)
这种⽅式⽐通过源码编译安装的⽅式要简单快捷得多,只需要输⼊⼀条install命令就可以了。
不同Linux发⾏版的安装⽅式略有不同,下⾯分别介绍⼀下。
3.1 CentOS/RHEL/Oracle Linux/AlmaLinux/Rocky Linux repository.
CentOS系Linux发⾏版可以使⽤yum来安装。
# 1. 安装EPEL仓库
sudo yum install epel-release
# 2. 更新repo
sudo yum update
# 3. 安装nginx
sudo yum install nginx
# 4. 验证安装
sudo nginx -V
复制代码
也可以通过Nginx的官⽅仓库来安装,如许可以保证安装的是最新的版本。
安装前置依靠
sudo yum install yum-utils
复制代码
添加nginx仓库
sudo vi /etc/yum.repos.d/nginx.repo
复制代码
添加以下内容
稳固版
[nginx-stable] [nginx-stable]
name=nginx stable repo
baseurl=http://nginx.org/packages/centos/$releasever/$basearch/
gpgcheck=1
enabled=1
gpgkey=https://nginx.org/keys/nginx_signing.key
module_hotfixes=true
复制代码
主线版
[nginx-mainline] [nginx-mainline]
name=nginx mainline repo
baseurl=http://nginx.org/packages/mainline/centos/$releasever/$basearch/
gpgcheck=1
enabled=0
gpgkey=https://nginx.org/keys/nginx_signing.key
module_hotfixes=true
复制代码
可以根据⾃⼰的需要来选择。
更新repo
sudo yum update
复制代码
安装nginx
sudo yum install nginx
复制代码
验证安装
除了使⽤ sudo nginx -V 之外,还可以使⽤下⾯的⽅式来验证:
# 启动Nginx
sudo nginx
curl -I 127.0.0.1
复制代码
如果能够看到类似下⾯的输出,就表示安装成功了:
HTTP/1.1 200 OK
Server: nginx/1.25.1
复制代码
3.2 Debian/Ubuntu repository
Debian、Ubuntu系列的Linux发⾏版可以使⽤apt来安装。
# 1. 更新仓库信息
sudo apt-get update
# 2. 安装nginx
sudo apt-get install nginx
# 3. 验证安装
sudo nginx -V
复制代码
同样也可以从Nginx官⽅仓库来安装。
# 1. 安装前置依赖
sudo apt install curl gnupg2 ca-certificates lsb-release debian-archivekeyring
# 2. 导⼊官⽅Nginx签名密钥
curl https://nginx.org/keys/nginx_signing.key | gpg --dearmor \
| sudo tee /usr/share/keyrings/nginx-archive-keyring.gpg >/dev/null
# 3. 验证下载的⽂件中包含了正确的密钥
gpg --dry-run --quiet --no-keyring --import --import-options import-show
/usr/share/keyrings/nginx-archive-keyring.gpg
# 4. 设置稳定版或者主线版的Nginx包
# 稳定版
echo "deb [signed-by=/usr/share/keyrings/nginx-archive-keyring.gpg] \
http://nginx.org/packages/debian `lsb_release -cs` nginx" \
| sudo tee /etc/apt/sources.list.d/nginx.list
# 主线版
echo "deb [signed-by=/usr/share/keyrings/nginx-archive-keyring.gpg] \
http://nginx.org/packages/mainline/debian `lsb_release -cs` nginx" \
| sudo tee /etc/apt/sources.list.d/nginx.list
# 5. 设置仓库优先级,优先使⽤Nginx官⽅仓库
echo -e "Package: *\nPin: origin nginx.org\nPin: release o=nginx\nPinPriority: 900\n" \
| sudo tee /etc/apt/preferences.d/99nginx
# 6. 安装nginx
sudo apt update
sudo apt install nginx
# 7. 验证安装
sudo nginx
curl -I 127.0.0.1
复制代码
4.Nginx的设置文件
Nginx的设置⽂件是 nginx.conf ,⼀般位于 /etc/nginx/nginx.conf 。
可以使⽤ nginx -t 来查看设置⽂件的位置和检查设置⽂件是否正确。
4.1 设置文件的结构
Nginx的设置⽂件是由⼀系列的指令组成的,每个指令都是由⼀个指令名和⼀个或者多个参数组成的。
指令和参数之间使⽤空格来分隔,指令以分号 ; 末端,参数可以使⽤单引号或者双引号来包裹。
设置⽂件分为以下⼏个部分:
# 全局块
worker_processes 1;
events {
# events块
}
http {
# http块
server {
# server块
location / {
# location块
}
}
}
复制代码
4.1.1 全局块
全局块是设置⽂件的第⼀个块,也是设置⽂件的主体部分,重要⽤来设置⼀些影响Nginx服务器整体运⾏的设置指令,重要包括设置运⾏Nginx服务器的⽤户(组)、允许⽣成的workerprocess数、进程PID存放路径、⽇志存放路径和范例以及设置⽂件引⼊等。
# 指定运⾏Nginx服务器的⽤户,只能在全局块配置
# 将user指令注释掉,或者配置成nobody的话所有⽤户都可以运⾏
# user [user] [group]
# user nobody nobody;
user nginx;
# 指定⽣成的worker进程的数量,也可使⽤⾃动模式,只能在全局块配置
worker_processes 1;
# 错误⽇志存放路径和类型
error_log /var/log/nginx/error.log warn;
# 进程PID存放路径
pid /var/run/nginx.pid;
复制代码
4.1.2 events块
events {
# 指定使⽤哪种⽹络IO模型,只能在events块中进⾏配置
# use epoll
# 每个worker process允许的最⼤连接数
worker_connections 1024;
}
复制代码
4.1.3 http块
http块是设置⽂件的重要部分,包括http全局块和server块。
http {
# nginx 可以使⽤include指令引⼊其他配置⽂件
include /etc/nginx/mime.types;
# 默认类型,如果请求的URL没有包含⽂件类型,会使⽤默认类型
default_type application/octet-stream; # 默认类型
# 开启⾼效⽂件传输模式
sendfile on;
# 连接超时时间
keepalive_timeout 65;
# access_log ⽇志存放路径和类型
# 格式为:access_log <path> [format [buffer=size] [gzip[=level]]
[flush=time] [if=condition]];
access_log /var/log/nginx/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"';
# 设置sendfile最⼤传输⽚段⼤⼩,默认为0,表示不限制
# sendfile_max_chunk 1m;
# 每个连接的请求次数
# keepalive_requests 100;
# keepalive超时时间
keepalive_timeout 65;
# 开启gzip压缩
# gzip on;
# 开启gzip压缩的最⼩⽂件⼤⼩
# gzip_min_length 1k;
# gzip压缩级别,1-9,级别越⾼压缩率越⾼,但是消耗CPU资源也越多
# gzip_comp_level 2;
# gzip压缩⽂件类型
# gzip_types text/plain application/javascript application/xjavascript text/css application/xml text/javascript application/x-httpdphp image/jpeg image/gif image/png;
# upstream指令⽤于定义⼀组服务器,⼀般⽤来配置反向代理和负载均衡
upstream www.example.com {
# ip_hash指令⽤于设置负载均衡的⽅式,ip_hash表示使⽤客户端的IP进⾏hash,
这样可以保证同⼀个客户端的请求每次都会分配到同⼀个服务器,解决了session共享的问题
ip_hash;
# weight ⽤于设置权重,权重越⾼被分配到的⼏率越⼤
server 192.168.50.11:80 weight=3;
server 192.168.50.12:80;
server 192.168.50.13:80;
}
server {
# 参考server块的配置
}
}
复制代码
4.1.4 server块
server块是设置虚拟主机的,⼀个http块可以包罗多个server块,每个server块就是⼀个虚拟主机。
server {
# 监听IP和端⼝
# listen的格式为:
# listen [ip]:port [default_server] [ssl] [http2] [spdy]
[proxy_protocol] [setfib=number] [fastopen=number] [backlog=number];
# listen指令⾮常灵活,可以指定多个IP和端⼝,也可以使⽤通配符
# 下⾯是⼏个实际的例⼦:
# listen 127.0.0.1:80; # 监听来⾃127.0.0.1的80端⼝的请求
# listen 80; # 监听来⾃所有IP的80端⼝的请求
# listen *:80; # 监听来⾃所有IP的80端⼝的请求,同上
# listen 127.0.0.1; # 监听来⾃来⾃127.0.0.1的80端⼝,默认端⼝为80
listen 80;
# server_name ⽤来指定虚拟主机的域名,可以使⽤精确匹配、通配符匹配和正则匹配等
⽅式
# server_name example.org www.example.org; # 精确匹配
# server_name *.example.org; # 通配符匹配
# server_name ~^www\d+\.example\.net$; # 正则匹配
server_name localhost;
# location块⽤来配置请求的路由,⼀个server块可以包含多个location块,每个
location块就是⼀个请求路由
# location块的格式是:
# location [=|~|~*|^~] /uri/ { ... }
# = 表示精确匹配,只有完全匹配上才能⽣效
# ~ 表示区分⼤⼩写的正则匹配
# ~* 表示不区分⼤⼩写的正则匹配
# ^~ 表示普通字符匹配,如果匹配成功,则不再匹配其他location
# /uri/ 表示请求的URI,可以是字符串,也可以是正则表达式
# { ... } 表示location块的配置内容
location / {
# root指令⽤于指定请求的根⽬录,可以是绝对路径,也可以是相对路径
root /usr/share/nginx/html; # 根⽬录
# index指令⽤于指定默认⽂件,如果请求的是⽬录,则会在⽬录下查找默认⽂件
index index.html index.htm; # 默认⽂件
}
# 下⾯是⼀些location的示例:
location = / { # 精确匹配请求
root /usr/share/nginx/html;
index index.html index.htm;
}
location ^~ /images/ { # 匹配以/images/开头的请求
root /usr/share/nginx/html;
}
location ~* \.(gif|jpg|jpeg)$ { # 匹配以gif、jpg或者jpeg结尾的请求
root /usr/share/nginx/html;
}
location !~ \.(gif|jpg|jpeg)$ { # 不匹配以gif、jpg或者jpeg结尾的请求
root /usr/share/nginx/html;
}
location !~* \.(gif|jpg|jpeg)$ { # 不匹配以gif、jpg或者jpeg结尾的请求
root /usr/share/nginx/html;
}
# error_page ⽤于指定错误⻚⾯,可以指定多个,按照优先级从⾼到低依次查找
error_page 500 502 503 504 /50x.html; # 错误⻚⾯
location = /50x.html {
root /usr/share/nginx/html;
}
}
复制代码
5 Nginx的常用命令
nginx # 启动Nginx
nginx -c filename # 指定配置⽂件
nginx -V # 查看Nginx的版本和编译参数等信息
nginx -t # 检查配置⽂件是否正确,也可⽤来定位配置⽂件的位置
nginx -s quit # 优雅停⽌Nginx
nginx -s stop # 快速停⽌Nginx
nginx -s reload # 重新加载配置⽂件
nginx -s reopen # 重新打开⽇志⽂件
复制代码
6 Nginx的常用模块
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
本帖子中包含更多资源
您需要
登录
才可以下载或查看,没有账号?
立即注册
x
回复
使用道具
举报
0 个回复
正序浏览
返回列表
快速回复
高级模式
B
Color
Image
Link
Quote
Code
Smilies
您需要登录后才可以回帖
登录
or
立即注册
本版积分规则
发表回复
回帖并转播
发新帖
回复
立聪堂德州十三局店
金牌会员
这个人很懒什么都没写!
楼主热帖
零信任介绍
哈夫曼应用
WPF开发随笔收录-获取软件当前目录的坑 ...
【iOS逆向与安全】frida-trace入门 ...
K8S 1.20 弃用 Docker 评估之 Docker C ...
计算机等级考试二级C语言上机题集(第1 ...
Go语言上手(三) | 青训营笔记 ...
django使用多个数据库实现
《数据库》第1章 数据库系统概论 ...
《微信小程序-基础篇》什么是组件化以 ...
标签云
挺好的
服务器
快速回复
返回顶部
返回列表