nginx
1、nginx简介
什么是nginx?
Nginx (engine x) 是一个高性能的HTTP和反向代理web服务器,同时也提供了IMAP/POP3/SMTP服务。Nginx是由伊戈尔·赛索耶夫为俄罗斯访问量第二的Rambler.ru站点(俄文:Рамблер)开发的,第一个公开版本0.1.0发布于2004年10月4日。
Nginx 是一个很强大的高性能Web和反向代理服务,它具有很多非常优越的特性:
在连接高并发的情况下,Nginx是Apache服务不错的替代品:Nginx在美国是做虚拟主机生意的老板们经常选择的软件平台之一。能够支持高达 50,000 个并发连接数的响应,感谢Nginx为我们选择了 epoll and kqueue作为开发模型。
反向代理
(1)、正向代理:梯子代理 ,访问最终目标 ,由配置的代理服务器去做
(2)、反向代理:访问代理,代理决定具体做什么。对外来讲,最终目标不可见,仅暴漏代理服务器ip端口
负载均衡
动静分离
2、nginx安装
docker方式安装如下
docker run --name nginx-test -p 80:80 -d nginx
配置文件/etc/nginx/nginx.conf
user nginx;
worker_processes 1;
error_log /var/log/nginx/error.log warn;
pid /var/run/nginx.pid;
# 以上统称为全局块
# worker_processes 数值越大,nginx的并发能力越强
# error_log nginx的错误日志的存放位置
events {
worker_connections 1024;
}
# events块
# worker_connections 数值越大,并发能力越强
http {
include /etc/nginx/mime.types;
default_type application/octet-stream;
# include /etc/nginx/conf.d/*.conf;替换为下面server块
server {
listen 80;
listen [::]:80;
server_name localhost;
location / {
root /usr/share/nginx/html;
index index.html index.htm;
}
# location块
# root 将接收到的请求根据/usr/share/nginx/html路径查找资源
# index 从上述路径查找index.html/index.htm文件,响应给用户
}
# server块
# listen nginx监听的端口号
# server_name nginx接受请求的ip
}
# http块
# include 引入一个外部配置文件 mime.types存放大量的媒体类型
# include /etc/nginx/conf.d/*.conf; 引入了conf.d目录下的.conf结尾配置文件
挂载目录,手动配置server块
docker run --name nginx-test -p 80:80 -v /docker_dir/docker_nginx/conf.d:/etc/nginx/conf.d -d nginx
配置好后,重启docker容器,成功访问。
3、反向代理
3.1、配置方式
server {
listen 80;
server_name localhost;
location / {
proxy_pass http://119.29.228.75:8080/; # 访问该nginx服务器,将会访问到http://119.29.228.75:8080
}
# location / {
# root /usr/share/nginx/html;
# index index.html index.htm;
# }
}
3.2、关于location路径映射
- = 匹配
location = / {
# 精准匹配,主机后面不能带任何的字符串
}
- 通用匹配
location /xxx {
# 匹配所有以/xxx开头的路径
}
- 正则匹配
location ~ /xxx {
# 匹配所有以/xxx开头的路径
}
4、负载均衡
nginx的三种负载均衡策略
- 轮询
将客户端请求平均分配给每个服务器
- 权重
根据每台服务器权重值的不同,将请求按比例分配给不同服务器
- ip_hash
ip计算hash值,不同的ip分配给不同服务器
4.1、轮询
upstream my-server{
server 119.29.228.75:8080;
server 119.29.228.75:8081;
}
# upstream 名字{
# server ip:port;
# server ip:port;
# ...
# }
server {
listen 80;
server_name localhost;
location / {
proxy_pass http://my-server;
# proxy_pass http://upstream的名字;
}
}
4.2、权重
upstream my-server{
server 119.29.228.75:8080 weight=10;
server 119.29.228.75:8081 weight=2;
}
# upstream 名字{
# server ip:port weight=权重值;
# server ip:port weight=权重值;
# ...
# }
server {
listen 80;
server_name localhost;
location / {
proxy_pass http://my-server;
# proxy_pass http://upstream的名字;
}
}
4.3、ip_hash
upstream my-server{
ip_hash;
server 119.29.228.75:8080;
server 119.29.228.75:8081;
}
# upstream 名字{
# server ip:port;
# server ip:port;
# ...
# }
server {
listen 80;
server_name localhost;
location / {
proxy_pass http://my-server;
# proxy_pass http://upstream的名字;
}
}
5、nginx动静分离
5.1、动态资源代理
location / {
proxy_pass 路径;
}
5.2、静态资源代理
location / {
root /data;
index index.html index.htm;
autoindex on; # 以列表方式展示全部静态资源
}