nginx简介,使用
nginx是什么
nginx是一个开源的,支持高性能,高并发的www服务和代理服务软件。
支持高并发,能支持几万并发连接
资源消耗少,在3万并发连接下开启10个nginx线程消耗的内存不到200M
可以做http反向代理和负载均衡
支持异步网络i/o事件模型epoll
Tengine是由淘宝网发起的Web服务器项目。它在Nginx的基础上,针对大访问量网站的需求,添加了很多高级功能和特性。T目标是打造一个高效、稳定、安全、易用的Web平台。
安装环境依赖包
yum install gcc-c++ pcre pcre-devel zlib zlib-devel gcc patch libffi-devel python-devel zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel gdbm-devel db4-devel libpcap-devel xz-devel openssl openssl-devel -y
安装并启动nginx
下载源码包
http://tengine.taobao.org/download/tengine-2.3.3.tar.gz
解压缩源码
tar -zxvf tengine-2.3.3.tar.gz
配置编译安装 开启nginx状态监测功能
./configure
make && make install
nginx操作,进入nginx下的sbin目录(默认在
/usr/local下
)- 启动
./nginx -c
指定配置文件
- 启动
- 关闭
./nginx -s stop
- 重新加载
./nginx -s reload
- 重新加载
- 检查配置文件
./nginx -t
部署一个web站点
nginx默认站点是Nginx目录下的html文件夹,这里可以从nginx.conf中查到
location / {
root html; # 这里是默认的站点html文件夹,也就是 /usr/local/nginx/html 文件夹下的内容
index index.html index.htm; # 站点首页文件名是index.html
}
如果要部署网站业务数据,只需要把开发好的程序全放到html目录下即可
[root@VM-0-3-centos html]# ls /usr/local/nginx/html/
50x.html index.html
因此只需要通过域名/资源,即可访问
http://a.zhaohaoyu.com
Nginx的目录结构
client_body_temp conf fastcgi_temp html logs proxy_temp sbin scgi_temp static uwsgi_temp
conf 存放nginx所有配置文件的目录,主要nginx.conf
html 存放nginx默认站点的目录,如index.html、error.html等
logs 存放nginx默认日志的目录,如error.log access.log
sbin 存放nginx主命令的目录,./nginx
Nginx主配置文件解析
Nginx主配置文件/etc/nginx/nginx.conf是一个纯文本类型的文件,整个配置文件是以区块的形式组织的。一般,每个区块以一对大括号{}来表示开始与结束。
CoreModule核心模块
user www
Nginx进程所使用的用户worker_processes 1
; Nginx运行的work进程数量(建议与CPU数量一致或auto)error_log logs/error.log
Nginx错误日志存放路径pid logs/nginx.pid
Nginx服务运行后产生的pid进程号
events事件模块
events {
worker_connections 1024; # 每个worker进程支持的最大连接数
use epool; # 事件驱动模型, epoll默认
}
http内核模块
# 公共的配置定义在http
http {
# http层开始 ...
include mime.types;
default_type application/octet-stream; access_log logs/access.log main; # 访问日志 # 使用Server配置网站, 每个Server{}代表一个网站(简称虚拟主机)
server {
listen 80; # 监听端口, 默认80
server_name localhost; # 提供服务的域名或主机名 location / {
root html; # 存放网站代码路径
index index.html index.htm; # 服务器返回的默认页面文件
} # 指定错误代码, 统一定义错误页面, 错误代码重定向到新的Locaiton
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
} }
include
当存在多个域名时,如果所有配置都写在 nginx.conf 主配置文件中,难免会显得杂乱与臃肿。为了方便配置文件的维护,所以需要进行拆分配置。
# 在nginx.conf中 加入 include a.zhaohaiyu.com/nginx.conf;
# 在a.zhaohaiyu.com/nginx.conf中加入
server {
listen 8000;
server_name test2.com; location / {
proxy_set_header Host $host:$server_port;
proxy_set_header X-Real-Ip $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
## proxy_pass http://xxx.xxx.xxx; echo "test2.com"; ## 输出测试
}
}
# 等于把zhaohaiyu.com/nginx.conf直接吸入nginx.conf中
Nginx虚拟主机
如果每台linux服务器只运行了一个小网站,那么人气低,流量小的草根站长需要承担高额的服务器租赁费,也造成了硬件资源浪费。
虚拟主机就是将一台服务器分割成多个“虚拟服务器”,每个站点使用各自的硬盘空间,由于省资源,省钱,众多网站都使用虚拟主机来部署网站。
虚拟主机的概念就是在web服务里的一个独立的网站站点,这个站点对应独立的域名(IP),具有独立的程序和资源目录,可以独立的对外提供服务。 这个独立的站点配置是在nginx.conf中使用server{}代码块标签来表示一个虚拟主机。 Nginx支持多个server{}标签,即支持多个虚拟主机站点。
nginx status
启用nginx status配置
在默认主机里面加上location或者你希望能访问到的主机里面。
server {
stub_status on;
}
重启nginx
请依照你的环境重启你的nginx
./ngnix -s reload
打开status页面
nginx status
active connections
– 活跃的连接数量server accepts handled requests
— 总共处理了11989个连接 , 成功创建11989次握手, 总共处理了11991个请求reading
— 读取客户端的连接数.writing
— 响应数据到客户端的数量waiting
— 开启 keep-alive 的情况下,这个值等于 active – (reading+writing), 意思就是 Nginx 已经处理完正在等候下一次请求指令的驻留连接.
Nginx代理
正向代理
正向代理,也就是传说中的代理,他的工作原理就像一个跳板(VPN),简单的说:
我是一个用户,我访问不了某网站,但是我能访问一个代理服务器,这个代理服务器呢,他能访问那个我不能访问的网站,于是我先连上代理服务器,告诉他我需要那个无法访问网站的内容,代理服务器去取回来,然后返回给我。
反向代理
对于客户端而言,代理服务器就像是原始服务器。
nginx实现负载均衡的组件
ngx_http_proxy_module # proxy代理模块,用于把请求抛给服务器节点或者upstream服务器池
实现一个简单的反向代理
机器准备,两台服务器
master 192.168.11.63 主负载 slave 192.168.11.64 web1
主负载均衡节点的配置文件
worker_processes 1;
error_log logs/error.log; pid
logs/nginx.pid;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
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 logs/access.log main;
sendfile on;
keepalive_timeout 65;
upstream slave_pools {
server 192.168.11.64:80 weight=1;
}
server {
listen 80;
server_name localhost;
location / {
proxy_pass http://slave_pools;
root html;
index index.html index.htm;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
}
检查语法并启动nginx
[root@master 192.168.11.63 /opt/nginx1-12]$./nginx -t
nginx: the configuration file /opt/nginx1-12/conf/nginx.conf syntax is ok nginx: configuration file /opt/nginx1-12/conf/nginx.conf test is successful
#启动nginx
[root@master 192.168.11.63 /opt/nginx1-12]$/./nginx
#检查端口
[root@master 192.168.11.63 /opt/nginx1-12]$netstat -tunlp|grep nginx tcp
0 0 0.0.0.0:80 0.0.0.0:* LISTEN 8921/nginx: master
此时访问master的服务器192.168.11.63:80地址,已经会将请求转发给slave的80端口
除了页面效果的展示以外,还可以通过log(access.log)查看代理效果
master端日志
slave端日志
LOCALTION
Location语法优先级排列
匹配符 匹配规则 优先级
= 精确匹配 1
^~ 以某个字符串开头 2
~ 区分大小写的正则匹配 3
~* 不区分大小写的正则匹配 4
!~ 区分大小写不匹配的正则 5
!~* 不区分大小写不匹配的正则 6
/ 通用匹配,任何请求都会匹配到 7
nginx.conf配置文件实例
server {
listen 80;
server_name pythonav.cn; #优先级1,精确匹配,根路径
location =/ {
return 400;
} #优先级2,以某个字符串开头,以av开头的,优先匹配这里,区分大小写
location ^~ /av {
root /data/av/;
} #优先级3,区分大小写的正则匹配,匹配/media*****路径
location ~ /media {
alias /data/static/;
} #优先级4 ,不区分大小写的正则匹配,所有的****.jpg|gif|png 都走这里
location ~* .*\.(jpg|gif|png|js|css)$ {
root /data/av/;
} #优先7,通用匹配
location / {
return 403;
}
}
nginx语法之root和alias区别实战
nginx指定文件路径有root和alias两种方法 区别在方法和作用域:
方法:
root 语法 root 路径; 默认值 root html; 配置块 http{} server {} location{}
alias 语法: alias 路径 配置块 location{}
root和alias区别在nginx如何解释location后面的url,这会使得两者分别以不同的方式讲请求映射到服务器文件上
root参数是root路径+location位置
root实例:
location ^~ /av { root /data/av; 注意这里可有可无结尾的 / }
请求url是zhaohaiyu.com/av/index.html时 web服务器会返回服务器上的/data/av/av/index.html
root实例2:
location ~* .*\.(jpg|gif|png|js|css)$ { root /data/av/; }
请求url是zhaohaiyu.com/girl.gif时 web服务器会返回服务器上的/data/static/girl.gif
alias实例:
- alias参数是使用alias路径替换location路径 alias是一个目录的别名 注意alias必须有 "/" 结束! alias只能位于location块中
location ^~ /av { alias /data/static/; }
请求url是zhaohaiyu.com/av/index.html时 web服务器会返回服务器上的/data/static/index.html
Keepalived高可用软件
什么是keepalived
- Keepalived是一个用C语言编写的路由软件。该项目的主要目标是为Linux系统和基于Linux的基础架构提供简单而强大的负载均衡和高可用性设施。 还可以作为其他服务(nginx,mysql)的高可用软件 keepalived主要通过vrrp协议实现高可用功能。vrrp叫(virtual router redundancy protocol)虚拟路由器冗余协议,目的为了解决单点故障问题,他可以保证个别节点宕机时。整个网络可以不间断的运行。
高可用故障切换原理
- 在keepalived工作时,主master节点会不断的向备节点发送心跳消息,告诉备节点自己还活着, 当master节点故障时,就无法发送心跳消息,备节点就无法检测到来自master的心跳了,于是调用自身的接管程序,接管master节点的ip资源以及服务, 当master主节点恢复时,备backup节点又会释放接管的ip资源和服务,回复到原本的备节点角色。
- 硬件环境准备
实验环境应该最好是4台虚拟机,环境有限因此用2台机器
master
slave
global_defs {
notification_email {
eric.k.zhang@ericsson.com
}
notification_email_from keepalived@node-10-210-149-21
smtp_server 127.0.0.1
smtp_connect_timeout 30
router_id LVS_DEVEL
}
vrrp_script check_webproxy {
script "killall -0 nginx"
interval 1
weight 21
}
vrrp_script check_mantaince_down {
script "[[ -f /etc/keepalived/down ]] && exit 1 || exit 0"
interval 1
weight 2
}
vrrp_instance vip_10_210_149_23 {
state MASTER
interface ens192
virtual_router_id 23
garp_master_delay 1
mcast_src_ip 10.210.149.21
lvs_sync_daemon_interface ens192
priority 110
advert_int 2
authentication {
auth_type PASS
auth_pass 1111
}
track_interface {
ens192
}
virtual_ipaddress {
10.210.149.23/24 dev ens192 label ens192:0
}
track_script {
check_webproxy
check_mantaince_down
}
}
vrrp_instance nginx_vip_10_210.149_24 {
state BACKUP
interface ens192
virtual_router_id 24
garp_master_delay 1
mcast_src_ip 10.210.149.21
lvs_sync_daemon_interface ens192
priority 100
advert_int 2
authentication {
auth_type PASS
auth_pass 1111
}
track_interface {
ens192
}
virtual_ipaddress {
10.210.149.24/24 dev ens192 label ens192:1
}
track_script {
check_webproxy
check_mantaince_down
}
}
global_defs {
notification_email {
eric.k.zhang@ericsson.com
}
notification_email_from keepalived@node-10-210-149-21
smtp_server 127.0.0.1
smtp_connect_timeout 30
router_id LVS_DEVEL
}
vrrp_script check_webproxy {
script "killall -0 nginx"
interval 1
weight 21
}
vrrp_script check_mantaince_down {
script "[[ -f /etc/keepalived/down ]] && exit 1 || exit 0"
interval 1
weight 2
}
vrrp_instance vip_10_210_149_23 {
state BACKUP
interface ens192
virtual_router_id 23
garp_master_delay 1
mcast_src_ip 10.210.149.22
lvs_sync_daemon_interface ens192
priority 100
advert_int 2
authentication {
auth_type PASS
auth_pass 1111
}
track_interface {
ens192
}
virtual_ipaddress {
10.210.149.23/24 dev ens192 label ens192:0
}
track_script {
check_webproxy
check_mantaince_down
}
}
vrrp_instance nginx_vip_10_210.149_24 {
state MASTER
interface ens192
virtual_router_id 24
garp_master_delay 1
mcast_src_ip 10.210.149.22
lvs_sync_daemon_interface ens192
priority 110
advert_int 2
authentication {
auth_type PASS
auth_pass 1111
}
track_interface {
ens192
}
virtual_ipaddress {
10.210.149.24/24 dev ens192 label ens192:1
}
track_script {
check_webproxy
check_mantaince_down
}
}
nginx简介,使用的更多相关文章
- Nginx简介及配置实用
Nginx简介 Nginx是一个高性能的HTTP和反向代理服务器: 支持的操作系统众多,windows.linux. MacOS X: 可实现负载均衡: Rewrite功能强大: 电商架构大部分都采用 ...
- Nginx高性能服务器安装、配置、运维 (1) —— Nginx简介
一.Nginx 简介 Nginx ("engine x") 是一个高性能的 HTTP 和 反向代理 服务器,同时也是一个 IMAP/POP3/SMTP 代理服务器. Nginx特点 ...
- nginx简介与配置
nginx简介 nginx(发音同engine x)是一款轻量级的Web服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,并在一个BSD-like协议下发行. nginx由俄罗斯的程序 ...
- nginx简介(轻量级开源高并发web服务器:大陆使用者百度、京东、新浪、网易、腾讯、淘宝等)(并发量5w)(一般网站apache够用了,而且稳定)
nginx简介(轻量级开源高并发web服务器:大陆使用者百度.京东.新浪.网易.腾讯.淘宝等)(并发量5w)(一般网站apache够用了,而且稳定) 一.总结 1.在连接高并发的情况下,Nginx是A ...
- Nginx简介及配置文件详解
http://blog.csdn.net/hzsunshine/article/details/63687054 一 Nginx简介 Nginx是一款开源代码的高性能HTTP服务器和反向代理服务 ...
- Nginx 简介与安装、常用的命令和配置文件
1.nginx 简介(1)介绍 nginx 的应用场景和具体可以做什么事情 (2)介绍什么是反向代理 (3)介绍什么是负载均衡 (4)介绍什么是动静分离 2.nginx 安装(1)介绍 nginx 在 ...
- Nginx网络架构实战学习笔记(一):Nginx简介、安装、信号控制、nginx虚拟主机配置、日志管理、location 语法、Rewrite语法详解
文章目录 nginx简介 nginx安装 nginx信号控制 nginx虚拟主机配置 日志管理 location 语法 精准匹配的一般匹配 正则匹配 总结 Rewrite语法详解 nginx简介 Ng ...
- 01 . Nginx简介及部署
Nginx简介 Nginx(发音同engine x)是一个异步框架的 Web 服务器,也可以用作反向代理,负载平衡器 和 HTTP 缓存.该软件由 Igor Sysoev 创建,并于2004年首次公开 ...
- Nginx 笔记(一)nginx简介与安装
个人博客网:https://wushaopei.github.io/ (你想要这里多有) Nginx 简介: 1.介绍 nginx 的应用场景和具体可以做什么事情 2.介绍什么是反向代理 3.介 ...
- 001.Nginx简介
一 Nginx概述 1.1 Nginx简介 Nginx是一个高性能的HTTP和反向代理web服务器,Nginx是一款轻量级的Web服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,在B ...
随机推荐
- C++第五十二篇 -- 多线程之消息传递
主线程向子线程发送消息 参考链接:https://www.cnblogs.com/ranjiewen/p/5729539.html 1. 创建线程语句 HANDLE hThread; DWORD dw ...
- C++第三十三篇 -- 研究一下Windows驱动开发(一)内部构造介绍
因为工作原因,需要做一些与网卡有关的测试,其中涉及到了驱动这一块的知识,虽然程序可以运行,但是不搞清楚,心里总是不安,觉得没理解清楚.因此想看一下驱动开发.查了很多资料,看到有人推荐Windows驱动 ...
- SpringCloud升级之路2020.0.x版-2.微服务框架需要考虑的问题
本系列为之前系列的整理重启版,随着项目的发展以及项目中的使用,之前系列里面很多东西发生了变化,并且还有一些东西之前系列并没有提到,所以重启这个系列重新整理下,欢迎各位留言交流,谢谢!~ 上图中演示了一 ...
- ASP.NET使用递归算法实现画树程序
实现效果如下:(随机生成) using System; using System.Collections.Generic; using System.ComponentModel; using Sys ...
- jquery 阻止表单提交方法
<form name="message_form" action="?m=mobilecenter&c=index&a=service" ...
- 总结开发中基于DevExpress的Winform界面效果
DevExpress是一家全球知名的控件开发公司, DevExpress 也特指此公司出品的控件集合或某系列控件或其中某控件.我们应用最为广泛的是基于Winform的DevExpress控件组,本篇随 ...
- sqli-labs 靶场笔记
sqli-labs 靶场笔记 冲冲冲,好好学习 2020年1月12号 先来点铺垫 分类: 按照请求方法分类: 1.Get型注入:注入参数在get的参数里. 2.POST型注入:注入参数在POST的参数 ...
- linux之frp服务部署(内网穿透)
frp服务部署(内网穿透) 目的 更快的进行内网穿透调试以及云端开发测试 服务器为CentOS 7,客户端为win11 frp介绍 frp 是一个开源项目, 采用 C/S 模式,将服务端部署在具有公网 ...
- C++ 封装类 2 设计一个学生类 属性有姓名学号 可以给姓名 和学号赋值 可以显示学生的姓名和学号
1 //设计一个学生类 属性有姓名学号 可以给姓名 和学号赋值 可以显示学生的姓名和学号 2 #include <iostream> 3 #include<string> 4 ...
- RedisTemplate连接不释放、Redis断线不重连问题、Redis连接数高飙升
使用RedisTemplate操作Redis数据,但遇到网络断线后不会重新连接 毫无头绪 一顿捣鼓 最终解决 整理如下 帮助更多的人 1.起因 使用RedisTemplate 配置 开启了事务 ena ...