第59篇 Nginx详细教程

打印 上一主题 下一主题

主题 747|帖子 747|积分 2241

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. # 1. 安装EPEL仓库
  2. sudo yum install epel-release
  3. # 2. 更新repo
  4. sudo yum update
  5. # 3. 安装nginx
  6. sudo yum install nginx
  7. # 4. 验证安装
  8. sudo nginx -V
复制代码
也可以通过Nginx的官⽅仓库来安装,如许可以保证安装的是最新的版本。

  • 安装前置依靠
    1. sudo yum install yum-utils
    复制代码
  • 添加nginx仓库
    1. sudo vi /etc/yum.repos.d/nginx.repo
    复制代码
  • 添加以下内容
稳固版
  1.         [nginx-stable] [nginx-stable]
  2.         name=nginx stable repo
  3.         baseurl=http://nginx.org/packages/centos/$releasever/$basearch/
  4.         gpgcheck=1
  5.         enabled=1
  6.         gpgkey=https://nginx.org/keys/nginx_signing.key
  7.         module_hotfixes=true
复制代码
主线版
  1.         [nginx-mainline] [nginx-mainline]
  2.         name=nginx mainline repo
  3.         baseurl=http://nginx.org/packages/mainline/centos/$releasever/$basearch/
  4.         gpgcheck=1
  5.         enabled=0
  6.         gpgkey=https://nginx.org/keys/nginx_signing.key
  7.         module_hotfixes=true
复制代码
可以根据⾃⼰的需要来选择。

  • 更新repo
    1. sudo yum update
    复制代码
  • 安装nginx
    1. sudo yum install nginx
    复制代码
  • 验证安装
    除了使⽤ sudo nginx -V 之外,还可以使⽤下⾯的⽅式来验证:
    1. # 启动Nginx
    2. sudo nginx
    3. curl -I 127.0.0.1
    复制代码
如果能够看到类似下⾯的输出,就表示安装成功了:
  1.         HTTP/1.1 200 OK
  2.         Server: nginx/1.25.1
复制代码
3.2 Debian/Ubuntu repository

Debian、Ubuntu系列的Linux发⾏版可以使⽤apt来安装。
  1.         # 1. 更新仓库信息
  2.         sudo apt-get update
  3.         # 2. 安装nginx
  4.         sudo apt-get install nginx
  5.         # 3. 验证安装
  6.         sudo nginx -V
复制代码
同样也可以从Nginx官⽅仓库来安装。
  1. # 1. 安装前置依赖
  2. sudo apt install curl gnupg2 ca-certificates lsb-release debian-archivekeyring
  3. # 2. 导⼊官⽅Nginx签名密钥
  4. curl https://nginx.org/keys/nginx_signing.key | gpg --dearmor \
  5. | sudo tee /usr/share/keyrings/nginx-archive-keyring.gpg >/dev/null
  6. # 3. 验证下载的⽂件中包含了正确的密钥
  7. gpg --dry-run --quiet --no-keyring --import --import-options import-show
  8. /usr/share/keyrings/nginx-archive-keyring.gpg
  9. # 4. 设置稳定版或者主线版的Nginx包
  10. # 稳定版
  11. echo "deb [signed-by=/usr/share/keyrings/nginx-archive-keyring.gpg] \
  12. http://nginx.org/packages/debian `lsb_release -cs` nginx" \
  13. | sudo tee /etc/apt/sources.list.d/nginx.list
  14. # 主线版
  15. echo "deb [signed-by=/usr/share/keyrings/nginx-archive-keyring.gpg] \
  16. http://nginx.org/packages/mainline/debian `lsb_release -cs` nginx" \
  17. | sudo tee /etc/apt/sources.list.d/nginx.list
  18. # 5. 设置仓库优先级,优先使⽤Nginx官⽅仓库
  19. echo -e "Package: *\nPin: origin nginx.org\nPin: release o=nginx\nPinPriority: 900\n" \
  20. | sudo tee /etc/apt/preferences.d/99nginx
  21. # 6. 安装nginx
  22. sudo apt update
  23. sudo apt install nginx
  24. # 7. 验证安装
  25. sudo nginx
  26. curl -I 127.0.0.1
复制代码
4.Nginx的设置文件

Nginx的设置⽂件是 nginx.conf ,⼀般位于 /etc/nginx/nginx.conf 。
可以使⽤ nginx -t 来查看设置⽂件的位置和检查设置⽂件是否正确。
4.1 设置文件的结构

Nginx的设置⽂件是由⼀系列的指令组成的,每个指令都是由⼀个指令名和⼀个或者多个参数组成的。
指令和参数之间使⽤空格来分隔,指令以分号 ; 末端,参数可以使⽤单引号或者双引号来包裹。
设置⽂件分为以下⼏个部分:
  1. # 全局块
  2. worker_processes 1;
  3. events {
  4. # events块
  5. }
  6. http {
  7. # http块
  8. server {
  9. # server块
  10. location / {
  11. # location块
  12. }
  13. }
  14. }
复制代码
4.1.1 全局块

全局块是设置⽂件的第⼀个块,也是设置⽂件的主体部分,重要⽤来设置⼀些影响Nginx服务器整体运⾏的设置指令,重要包括设置运⾏Nginx服务器的⽤户(组)、允许⽣成的workerprocess数、进程PID存放路径、⽇志存放路径和范例以及设置⽂件引⼊等。
  1. # 指定运⾏Nginx服务器的⽤户,只能在全局块配置
  2. # 将user指令注释掉,或者配置成nobody的话所有⽤户都可以运⾏
  3. # user [user] [group]
  4. # user nobody nobody;
  5. user nginx;
  6. # 指定⽣成的worker进程的数量,也可使⽤⾃动模式,只能在全局块配置
  7. worker_processes 1;
  8. # 错误⽇志存放路径和类型
  9. error_log /var/log/nginx/error.log warn;
  10. # 进程PID存放路径
  11. pid /var/run/nginx.pid;
复制代码
4.1.2 events块
  1. events {
  2. # 指定使⽤哪种⽹络IO模型,只能在events块中进⾏配置
  3. # use epoll
  4. # 每个worker process允许的最⼤连接数
  5. worker_connections 1024;
  6. }
复制代码
4.1.3 http块

http块是设置⽂件的重要部分,包括http全局块和server块。
  1. http {
  2. # nginx 可以使⽤include指令引⼊其他配置⽂件
  3. include /etc/nginx/mime.types;
  4. # 默认类型,如果请求的URL没有包含⽂件类型,会使⽤默认类型
  5. default_type application/octet-stream; # 默认类型
  6. # 开启⾼效⽂件传输模式
  7. sendfile on;
  8. # 连接超时时间
  9. keepalive_timeout 65;
  10. # access_log ⽇志存放路径和类型
  11. # 格式为:access_log <path> [format [buffer=size] [gzip[=level]]
  12. [flush=time] [if=condition]];
  13. access_log /var/log/nginx/access.log main;
  14. # 定义⽇志格式
  15. log_format main '$remote_addr - $remote_user [$time_local]
  16. "$request" '
  17. '$status $body_bytes_sent "$http_referer" '
  18. '"$http_user_agent" "$http_x_forwarded_for"';
  19. # 设置sendfile最⼤传输⽚段⼤⼩,默认为0,表示不限制
  20. # sendfile_max_chunk 1m;
  21. # 每个连接的请求次数
  22. # keepalive_requests 100;
  23. # keepalive超时时间
  24. keepalive_timeout 65;
  25. # 开启gzip压缩
  26. # gzip on;
  27. # 开启gzip压缩的最⼩⽂件⼤⼩
  28. # gzip_min_length 1k;
  29. # gzip压缩级别,1-9,级别越⾼压缩率越⾼,但是消耗CPU资源也越多
  30. # gzip_comp_level 2;
  31. # gzip压缩⽂件类型
  32. # gzip_types text/plain application/javascript application/xjavascript text/css application/xml text/javascript application/x-httpdphp image/jpeg image/gif image/png;
  33. # upstream指令⽤于定义⼀组服务器,⼀般⽤来配置反向代理和负载均衡
  34. upstream www.example.com {
  35. # ip_hash指令⽤于设置负载均衡的⽅式,ip_hash表示使⽤客户端的IP进⾏hash,
  36. 这样可以保证同⼀个客户端的请求每次都会分配到同⼀个服务器,解决了session共享的问题
  37. ip_hash;
  38. # weight ⽤于设置权重,权重越⾼被分配到的⼏率越⼤
  39. server 192.168.50.11:80 weight=3;
  40. server 192.168.50.12:80;
  41. server 192.168.50.13:80;
  42. }
  43. server {
  44. # 参考server块的配置
  45. }
  46. }
复制代码
4.1.4 server块

server块是设置虚拟主机的,⼀个http块可以包罗多个server块,每个server块就是⼀个虚拟主机。
  1. server {
  2. # 监听IP和端⼝
  3. # listen的格式为:
  4. # listen [ip]:port [default_server] [ssl] [http2] [spdy]
  5. [proxy_protocol] [setfib=number] [fastopen=number] [backlog=number];
  6. # listen指令⾮常灵活,可以指定多个IP和端⼝,也可以使⽤通配符
  7. # 下⾯是⼏个实际的例⼦:
  8. # listen 127.0.0.1:80; # 监听来⾃127.0.0.1的80端⼝的请求
  9. # listen 80; # 监听来⾃所有IP的80端⼝的请求
  10. # listen *:80; # 监听来⾃所有IP的80端⼝的请求,同上
  11. # listen 127.0.0.1; # 监听来⾃来⾃127.0.0.1的80端⼝,默认端⼝为80
  12. listen 80;
  13. # server_name ⽤来指定虚拟主机的域名,可以使⽤精确匹配、通配符匹配和正则匹配等
  14. ⽅式
  15. # server_name example.org www.example.org; # 精确匹配
  16. # server_name *.example.org; # 通配符匹配
  17. # server_name ~^www\d+\.example\.net$; # 正则匹配
  18. server_name localhost;
  19. # location块⽤来配置请求的路由,⼀个server块可以包含多个location块,每个
  20. location块就是⼀个请求路由
  21. # location块的格式是:
  22. # location [=|~|~*|^~] /uri/ { ... }
  23. # = 表示精确匹配,只有完全匹配上才能⽣效
  24. # ~ 表示区分⼤⼩写的正则匹配
  25. # ~* 表示不区分⼤⼩写的正则匹配
  26. # ^~ 表示普通字符匹配,如果匹配成功,则不再匹配其他location
  27. # /uri/ 表示请求的URI,可以是字符串,也可以是正则表达式
  28. # { ... } 表示location块的配置内容
  29. location / {
  30. # root指令⽤于指定请求的根⽬录,可以是绝对路径,也可以是相对路径
  31. root /usr/share/nginx/html; # 根⽬录
  32. # index指令⽤于指定默认⽂件,如果请求的是⽬录,则会在⽬录下查找默认⽂件
  33. index index.html index.htm; # 默认⽂件
  34. }
  35. # 下⾯是⼀些location的示例:
  36. location = / { # 精确匹配请求
  37. root /usr/share/nginx/html;
  38. index index.html index.htm;
  39. }
  40. location ^~ /images/ { # 匹配以/images/开头的请求
  41. root /usr/share/nginx/html;
  42. }
  43. location ~* \.(gif|jpg|jpeg)$ { # 匹配以gif、jpg或者jpeg结尾的请求
  44. root /usr/share/nginx/html;
  45. }
  46. location !~ \.(gif|jpg|jpeg)$ { # 不匹配以gif、jpg或者jpeg结尾的请求
  47. root /usr/share/nginx/html;
  48. }
  49. location !~* \.(gif|jpg|jpeg)$ { # 不匹配以gif、jpg或者jpeg结尾的请求
  50. root /usr/share/nginx/html;
  51. }
  52. # error_page ⽤于指定错误⻚⾯,可以指定多个,按照优先级从⾼到低依次查找
  53. error_page 500 502 503 504 /50x.html; # 错误⻚⾯
  54. location = /50x.html {
  55. root /usr/share/nginx/html;
  56. }
  57. }
复制代码
5 Nginx的常用命令
  1. nginx # 启动Nginx
  2. nginx -c filename # 指定配置⽂件
  3. nginx -V # 查看Nginx的版本和编译参数等信息
  4. nginx -t # 检查配置⽂件是否正确,也可⽤来定位配置⽂件的位置
  5. nginx -s quit # 优雅停⽌Nginx
  6. nginx -s stop # 快速停⽌Nginx
  7. nginx -s reload # 重新加载配置⽂件
  8. nginx -s reopen # 重新打开⽇志⽂件
复制代码
6 Nginx的常用模块




免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

立聪堂德州十三局店

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表