Nginx 基础使用、配置文件详解、Keepalived高可用

2023-05-16

Nginx 基础使用

安装

# 解压nginx压缩包,压缩包自行下载
tar zxvf nginx-1.21.6.tar.gz
# 进入解压后目录
cd nginx-1.21.6
# 安装依赖
yum install -y gcc
yum install -y pcre pcre-devel
yum install -y zlib zlib-devel
# 编译安装到/usr/local/nginx
./configure --prefix=/usr/local/nginx
make
make install

启动Nginx

进入安装好的目录 /usr/local/nginx/sbin
./nginx 启动
./nginx -s stop 快速停止
./nginx -s quit 优雅关闭,在退出前完成已经接受的连接请求
./nginx -s reload 重新加载配置

关于防火墙

关闭防火墙

systemctl stop firewalld.service

禁止防火墙开机启动

systemctl disable firewalld.service

放行端口

firewall-cmd --zone=public --add-port=80/tcp --permanent

重启防火墙

firewall-cmd --reload

安装成系统服务

创建服务脚本

vi /usr/lib/systemd/system/nginx.service

服务脚本内容

[Unit]
Description=nginx - web server
After=network.target remote-fs.target nss-lookup.target

[Service]
Type=forking
PIDFile=/usr/local/nginx/logs/nginx.pid
ExecStartPre=/usr/local/nginx/sbin/nginx -t -c /usr/local/nginx/conf/nginx.conf
ExecStart=/usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf
ExecReload=/usr/local/nginx/sbin/nginx -s reload
ExecStop=/usr/local/nginx/sbin/nginx -s stop
ExecQuit=/usr/local/nginx/sbin/nginx -s quit
PrivateTmp=true

[Install]
WantedBy=multi-user.target

重新加载系统服务

systemctl daemon-reload

启动服务

systemctl start nginx

开机启动

systemctl enable nginx.service

目录结构

进入Nginx的主目录我们可以看到这些文件夹

client_body_temp conf fastcgi_temp html logs proxy_temp sbin scgi_temp uwsgi_temp

其中这几个文件夹在刚安装后是没有的,主要用来存放运行过程中的临时文件

client_body_temp fastcgi_temp proxy_temp scgi_temp

conf

用来存放配置文件相关

html

用来存放静态文件的默认目录 html、css等

sbin

nginx的主程序

基本运行原理

Nginx配置与应用场景

最小配置

worker_processes

worker_processes 1; 默认为1,表示开启一个业务进程

worker_connections

worker_connections 1024; 单个业务进程可接受连接数

include mime.types;

include mime.types; 引入http mime类型

default_type application/octet-stream;

default_type application/octet-stream; 如果mime类型没匹配上,默认使用二进制流的方式传输。

sendfile on;

sendfile on; 使用linux的sendfile(socket, file, len) 高效网络传输,也就是数据0拷贝。

未开启sendfile:

开启后

keepalive_timeout 65;

server

虚拟主机配置

server {
    listen 80; 监听端口号
    server_name localhost; 主机名
	location / { 匹配路径
		root html; 文件根目录
		index index.html index.htm; 默认页名称
	}
	error_page 500 502 503 504 /50x.html; 报错编码对应页面
	location = /50x.html {
		root html;
	}
}

虚拟主机

原本一台服务器只能对应一个站点,通过虚拟主机技术可以虚拟化成多个站点同时对外提供服务

servername匹配规则

我们需要注意的是servername匹配分先后顺序,写在前面的匹配上就不会继续往下匹配了。

完整匹配

我们可以在同一servername中匹配多个域名

server_name vod.mmban.com www1.mmban.com;

通配符匹配

server_name *.mmban.com

通配符结束匹配

server_name vod.*;

正则匹配

server_name ~^[0-9]+\.mmban\.com$;

反向代理

location / {
	proxy_pass http://baidu.com/;
}

基于反向代理的负载均衡

upstream httpd {
	server 192.168.44.102:80;
	server 192.168.43.103:80;
}

负载均衡策略
轮询
默认情况下使用轮询方式,逐一转发,这种方式适用于无状态请求。

weight(权重)

指定轮询几率,weight和访问比率成正比,用于后端服务器性能不均的情况。

upstream httpd {
	server 127.0.0.1:8050 weight=10 down;
	server 127.0.0.1:8060 weight=1;
	server 127.0.0.1:8060 weight=1 backup;
}

down:表示当前的server暂时不参与负载
weight:默认为1.weight越大,负载的权重就越大。
backup: 其它所有的非backup机器down或者忙的时候,请求backup机器。

ip_hash

根据客户端的ip地址转发同一台服务器,可以保持回话。

least_conn

最少连接访问

url_hash

根据用户访问的url定向转发请求

fair

根据后端服务器响应时间转发请求

动静分离

配置反向代理

location / {
	proxy_pass http://127.0.0.1:8080;
	root html;
	index index.html index.htm;
}

增加每一个location

location /css {
	root /usr/local/nginx/static;
	index index.html index.htm;
}
location /images {
	root /usr/local/nginx/static;
	index index.html index.htm;
}
location /js {
	root /usr/local/nginx/static;
	index index.html index.htm;
}

使用一个location
使用正则

location 前缀

/ 通用匹配,任何请求都会匹配到。
= 精准匹配,不是以指定模式开头
~ 正则匹配,区分大小写
~* 正则匹配,不区分大小写
^~ 非正则匹配,匹配以指定模式开头的location

location匹配顺序

多个正则location直接按书写顺序匹配,成功后就不会继续往后面匹配
普通(非正则)location会一直往下,直到找到匹配度最高的(最大前缀匹配)
当普通location与正则location同时存在,如果正则匹配成功,则不会再执行普通匹配
所有类型location存在时,“=”匹配 > “^~”匹配 > 正则匹配 > 普通(最大前缀匹配)

location ~*/(css|img|js) {
	root /usr/local/nginx/static;
	index index.html index.htm;
}

alias与root

location /css {
	alias /usr/local/nginx/static/css;
	index index.html index.htm;
}

root用来设置根目录,而alias在接受请求的时候在路径上不会加上location。

1)alias指定的目录是准确的,即location匹配访问的path目录下的文件直接是在alias目录下查找的; 2)root指定的目录是location匹配访问的path目录的上一级目录,这个path目录一定要是真实存在root指定目录下的;
3)使用alias标签的目录块中不能使用rewrite的break(具体原因不明);另外,alias指定的目录后面必须要加上"/“符
号!!
4)alias虚拟目录配置中,location匹配的path目录如果后面不带”/“,那么访问的url地址中这个path目录后面加不加”/“不影响访问,访问时它会自动加上”/“; 但是如果location匹配的path目录后面加上”/“,那么访问的url地址中这个path目录必须要加上”/“,访问时它不会自动加上”/“。如果不加上”/“,访问就会失败!
5)root目录配置中,location匹配的path目录后面带不带”/",都不会影响访问。

UrlRewrite

rewrite语法格式及参数语法:

在这里插入图片描述
在这里插入图片描述
实例

rewrite   ^/([0-9]+).html$    /index.jsp?pageNum=$1    break;

同时使用负载均衡
应用服务器防火墙配置
开启防火墙

systemctl start firewalld

重启防火墙

systemctl restart firewalld

重载规则

firewall-cmd --reload

查看已配置规则

firewall-cmd --list-all

指定端口和ip访问

firewall-cmd --permanent --add-rich-rule="rule family="ipv4" source address="192.168.44.101" port protocol="tcp" port="8080" accept"

移除规则

firewall-cmd --permanent --remove-rich-rule="rule family="ipv4" source address="192.168.44.101" port port="8080" protocol="tcp" accept"

网关配置

upstream httpds {
	server 192.168.44.102 weight=8 down;
	server 192.168.44.103:8080 weight=2;
	server 192.168.44.104:8080 weight=1 backup;
}
location / {
	rewrite ^/([0-9]+).html$   /index.jsp?pageNum=$1   redirect;
	proxy_pass http://httpds ;
}

防盗链配置

valid_referers none | blocked | server_names | strings ;

  • none, 检测 Referer 头域不存在的情况。
  • blocked,检测 Referer 头域的值被防火墙或者代理服务器删除或伪装的情况。这种情况该头域的值不以“http://” 或 “https://” 开头。
  • server_names ,设置一个或多个 URL ,检测 Referer 头域的值是否是这些 URL 中的某一个。

在需要防盗链的location中配置

valid_referers 192.168.44.101;
if ($invalid_referer) {
	return 403;
}

使用curl测试

curl -I http://192.168.44.101/img/logo.png

带引用

curl -e "http://baidu.com" -I http://192.168.44.101/img/logo.png

高可用配置

安装Keepalived

Keepalived可以虚拟出一个ip,多台主机都配置Keepalived,当前主机挂了可以选举出另一台接管这个ip。这样只需要一个ip就可以连接主备机,无需关注主备切换。

如需关闭防火墙(不建议):

# 关闭
systemctl stop firewalld
# 禁止开机启动防火墙
systemctl disable firewalld

用yum的方式安装

yum install keepalived

配置主主机

使用yum安装后配置文件在

/etc/keepalived/keepalived.conf

配置文件内容很多,全部删掉替换成下面的,看注释做对应修改

! Configuration File for keepalived
global_defs {
   # 给当前主机起个名字
   router_id NGINX1
}
# vrrp是Keepalived在内网中通讯的协议,VI_1是实例名称,可改
vrrp_instance VI_1 {
   state MASTER
   # ens33是本机网卡名称,可以ip addr查看
   interface ens33
   virtual_router_id 51
   # 主备竞选时的优先级 数字越大越高
   priority 100
   # 间隔检测时间
   advert_int 1
   # 同一组的认证配置,防止同一个内网中多个Keepalived组错乱
   authentication {
      auth_type PASS
      auth_pass 1111
   }
   # 虚拟ip地址,用户访问下面的ip,会映射到本机,可配多个
   virtual_ipaddress {
      192.168.25.211
   }
}

启动Keepalived

systemctl start keepalived

查看当前ip

[root@nginx1 ~]# ip addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 00:0c:29:24:8c:bb brd ff:ff:ff:ff:ff:ff
    inet 192.168.25.125/24 brd 192.168.25.255 scope global noprefixroute dynamic ens33
       valid_lft 5358sec preferred_lft 5358sec
       
# 多了这个192.168.25.211的vip

    inet 192.168.25.211/32 scope global ens33
       valid_lft forever preferred_lft forever
    inet6 fe80::575:23df:be65:edbf/64 scope link noprefixroute 
       valid_lft forever preferred_lft forever

配置副主机

操作同主主机,配置文件与主主机不同的地方:

  • router_id 改名字
  • state BACKUP
  • priority 50

启动Keepalived

测试主主机宕机后,ip能否漂移

关机

init 0

关闭主主机依然能ping通即可。

ping 192.168.25.211

副主机ip addr发现192.168.25.211已经跑到副主机上。

Keepalived安装完成!
Keepalived只会检测自己的进程,假设主机没宕机,nginx宕机了,Keepalived是不会漂移ip的。此时可以写一个sh脚本,一直在服务器上跑,查看nginx状态,如果发现nginx挂了,则干掉Keepalived的进程。其他redis集群,mysql集群等,都是同理。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Nginx 基础使用、配置文件详解、Keepalived高可用 的相关文章

  • 【ChatGPT】帮你写周报,这是实在太干货了,老板都看不下去了

    说到写周报不少小伙伴会觉得是一件头疼的事情 xff0c 一周摸鱼了不到7天 xff0c 周报咋写 xff0c 掰指头都能数清的事在邮件中更是寥寥数字 xff0c 自己看着不舒服 xff0c 老板看着更是头大 xff0c 要不要搞掉他的想法油
  • Archlinux中普通用户无法使用root设置的zsh主题样式

    Archlinux中普通用户无法使用root设置的zsh主题样式 问题分析解决方法1 使用git到github上下载 注意要在普通用户下 2 查看当前主题3 查看可用主题 xff0c 选取下想用的主题4 编辑配置文件 xff0c 更换你想用
  • ArchLinux安装完成登陆时出现login incorrect错误

    汇总下来出现该错误有以下几种原因 1 输入密码时 xff0c 检查numlock是否开启 xff1b 使用字母上方的数字键进行输入 由于安装的linux键盘布局为us键盘布局 xff0c 小键盘在开机时 xff0c 默认为关闭状态 2 有人
  • VirtualBox中如何释放鼠标

    相信在使用VritualBox的小伙伴中 xff0c 有发现他释放鼠标的方式和VMware不一样 xff0c 其实也很简单 xff0c 并且VritualBox也有说明释放的方式 按键盘右边的Ctrl键就可以
  • c++中sizeof()的详细用法

    sizeof 定义 sizeof是一个操作符 xff08 operator xff09 其作用是返回一个对象或类型所占的内存字节数 sizeof 语法 sizeof有三种语法形式 xff1a 1 sizeof object sizeof 对
  • Linux下如何查找特定的文件

    使用 find命令 语法 xff1a find path options params 作用 xff1a 在指定目录下查找文件 常用用法示例 xff1a find name file java xff1a 精确查找文件 xff08 在根目录
  • Ubuntu16.04使用教程(一)——安装

    Ubuntu16 04使用教程 xff08 一 xff09 安装 前言 最近我同学需要用Ubuntu16 04做项目 xff0c 可是她之前从没用过 xff0c 于是我在这里写一些我常用的简单的操作吧 本节将教你如何在你的Windows电脑
  • Linux环境下QT开发(三)——QT编程基础

    Linux环境下QT开发 xff08 三 xff09 QT编程基础 在上一篇文章中 xff0c 我们完成了第一个程序 HelloWorld 在这篇文章中 xff0c 我将介绍一些QT编程基础知识 xff0c 让我们由此进入QT的世界 xff
  • Kali学习笔记(三)——Kali2020.1安装从入门到入土

    Kali学习笔记 xff08 三 xff09 Kali2020 1安装从入门到入土 我的笔记本是神舟战神Z7M KP7GT xff0c 配置如下 xff1a 项目配置CPU酷睿i7内存8GB显卡1050Ti固态硬盘128GB机械硬盘1TB
  • VP9编码(1)-- 简介

    VP9编码 xff08 1 xff09 简介 VP9是谷歌基于VP8发布的新版视频编解码标准 xff0c 主要对标H265 H264标准 youtube目前采用VP9标准 本系列博客为博主学习笔记 xff0c 翻译自 vp9 bitstre
  • c++学习之路

    3 19 内存分区模型 内存四区意义 不同区域存放的数据 xff0c 赋予不同的生命周期 给我们更大的灵活编程 程序exe 运行前分为 代码区和全局区 xff1b 运行后分为 栈区和堆区 1 代码区 存放CPU执行的机器指令 存放函数体的二
  • RTSP协议(2)——摘要(RFC2326)

    RTSP协议 xff08 2 xff09 摘要 实时流协议 xff08 RTSP xff09 是一种应用级协议 xff0c 用于控制实时数据的传输 RTSP提供了一个可扩展的框架 xff0c 以实现实时数据 xff08 如音频和视频 xff
  • 简道云-第3章-表单

    title 简道云 第3章 表单 date 2022 06 11 09 07 10 tags 简道云 categories 简道云 简道云 第3章 表单 背景介绍 简道云三个基本项目表单 流程以及仪表 关于它们的介绍可以参照官方文档表单 v
  • 搭建Hexo博客-第2章-Hexo基本用法

    搭建Hexo博客 第2章 Hexo基本用法 搭建Hexo博客 第2章 Hexo基本用法 搭建Hexo博客 第2章 Hexo基本用法 大家好 xff0c 在上一篇文章中 xff0c 我们学习了 Git GitHub 和 Coding 的基本用
  • 群晖-第5章-Docker安装gitlab

    群晖 第5章 Docker安装gitlab 群晖安装gitlab可以只在内网访问 xff0c 也就不需要前面几章的内容 xff0c 但是我这个是通过外网HTTPS访问的 参考 xff1a Nas码农篇 xff1a 群晖Docker安装Git
  • 小应用记账本-第1章-需求分析

    小应用记账本 第1章 需求分析 这个专题是开发一个小应用 记账本的记录 一 项目背景 我从21年开始用挖财记账 xff0c 挖财记账最初可以免费导出账本的 xff0c 但是后来变成了会员收费功能 xff0c 到23年年初 xff0c 有一次
  • 小应用记账本-第2章-数据库设计

    小应用记账本 第2章 数据库设计 在上一章 小应用记账本 第1章 需求分析 已经罗列了我们需要的功能 xff0c 因为很简单 xff0c 所以这一章就来设计数据库吧 Account表 xff1a 账户表 字段名类型说明取值idint账户id
  • Ae项目中,GPU加速不能使用了。视频预览显示应不少于2个帧或多帧,以及VR效果不能使用GPU加速!

    首先 xff0c 如果百度上的其他方法没有帮助到你 我这里还有另外一种方法 点击文件菜单下的项目设置 xff0c 看是否如图所示 如果可以的话 xff0c 点个关注支持一下 xff1a https space bilibili com 73
  • CCF A类会议或期刊----近两年对比学习相关论文

    工具代码位置 期待您的PR 会议 期刊论文sigmod2021Explaining Black Box Algorithms Using Probabilistic Contrastive Counterfactuals neurips20
  • 您还在为您公司的网络限制摸不了鱼在苦恼难过吗?难受的话请您看完:解决公司内网限制 Nginx反向代理访问外网

    1 nginx安装 xff08 在这里就不赘述了 xff09 2 修改nginx conf xff08 直接复制可用 xff09 worker processes 4 error log var logs nginx log info 日志

随机推荐