什么是nginx
?
<img src="https://www.lzmvlog.top/upload/2021/01/e7cd7b899e510fb30f2466c67079df95d143ad4ba602-b4127e5112344419801dba72d70d61e6.png" alt="e7cd7b899e510fb30f2466c67079df95d143ad4ba602" style="zoom:25%;" />
Nginx是一款轻量级的Web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,在BSD-like 协议下发行。其特点是占有内存少,并发能力强,事实上nginx的并发能力在同类型的网页服务器中表现较好
nginx
安装
1、手动安装
#安装 nginx
$ yum install nginx
#启动nginx
$ systemctl start nginx
#加入开机启动
$ systmctl enable nginx
#查看nginx的状态
$ systemctl status nginx
#检查 nginx 文件语法是否此错误
$ nginx -t
# 重载 nginx 配置
$ nginx -s reload
2、docker
安装
# 拉取镜像
$ docker pull nginx
# 运行docker
$ docker run -p 80:80 --name docker-nginx -d nginx
# 将容器中的文件复制到一个文件夹中
$ docker cp docker-nginx:/etc/nginx/nginx.conf /usr/local/nginx/conf/nginx.conf
# 删除上一个运行的 nginx 容器
$ docker rm -f docker -nginx
# 重新启动一个容器 将数据卷映射到刚才创建的目录
$ docker run -p 80:80 --name docker-nginx1 -d nginx
-v /usr/local/nginx/conf/nginx.conf:/etc/nginx/nginx.conf
-v /usr/local/nginx/conf.d:/etc/nginx/conf.d
-v /usr/local/nginx/log:/var/log/nginx
3、docker-compose
安装
version: '3.1'
services:
nginx:
image: nginx
restart: always
container_name: nginx
environment:
- TZ=Asia/Shanghai
ports:
- 80:80
- 443:443
volumes:
- /usr/local/nginx/conf/nginx.conf:/etc/nginx/nginx.conf
- /usr/local/nginx/log:/var/log/nginx
nginx重定向
注:需要先将服务器的
ip
解析到域名上
将域名重定向到当前的地址和端口
server {
# 监听的端口
listen 80;
# 域名
server_name www.xxx.xxx;
rewrite ^(.*)$ https://$host$1 permanent;
client_max_body_size 1024m;
location / {
proxy_set_header HOST $host;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
# 需要代理的 地址和端口
proxy_pass http://127.0.0.1:8080/;
}
}
配置https
server {
# 监听的端口 并开启ssl
listen 443 ssl;
# 域名
server_name www.xxx.xxx;
# 证书 不同网站申请的证书不同 均可以 只是后缀区分
ssl_certificate cert/xxx.crt;
ssl_certificate_key cert/xxx.key;
ssl_session_timeout 5m;
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
#ssl_prefer_server_ciphers on;
location / {
proxy_pass http://127.0.0.1:8080/;
#add_header Content-Security-Policy upgrade-insecure-requests;
}
}
nginx
搭建文件服务器
location /images/ {
root /root/;
autoindex on;
}
root
配置的意思是,会在root
配置的目录后跟上URL
,组成对应的文件路径。
意思就是我们在浏览器输入的这个地址实际访问的是
root/images
会把我们的location
后面的/images
拼到实际访问的路径之后
root/images/images
1、处理方法是把root
后面的images
去掉
2、root
替换成alias
location /images/ {
alias /root/images/;
autoindex on;
}
nginx
页面缓存
proxy_cache_path
格式:proxy_cache_path path [levels=numbers] keys_zone=zone_name:zone_size[inactive=time] [max_size=size]
说明:
path
-缓存文件存放的位置
levels
-缓存目录结构,可以是1、2、3位数字作为目录,最多是3位数字如:1,1:2
keys_zone
-指定缓存池名字及大小,每个定义缓存路径必须不同
inactive
-设置每个缓存区缓存文件的有效时长,超过该时长没被访问的缓存被删除
max_size
-设置不活动的缓存大小,不活动的缓存超过该大小后被删除
$upstream_cache_status
包含以下几种状态:
·MISS 未命中,请求被传送到后端
·HIT 缓存命中
·EXPIRED 缓存已经过期请求被传送到后端
·UPDATING 正在更新缓存,将使用旧的应答
·STALE 后端将得到过期的应答
配置
# 开启gzip
gzip on;
# 启用gzip压缩的最小文件,小于设置值的文件将不会压缩
gzip_min_length 1k;
# gzip 压缩级别,1-10,数字越大压缩的越好,也越占用CPU时间。一般设置1和2
gzip_comp_level 2;
proxy_cache_path /root/cache/ levels=1:2 keys_zone=tmpcache:100m max_size=10g;
server {
listen 80;
server_name localhost;
charset utf-8;
# 缓存的服务地址
add_header X-Via $server_addr;
# 缓存的状态 用于区分访问的资源是缓存的还是加载的
add_header X-Cache $upstream_cache_status;
location / {
proxy_set_header X-Real-IP $remote_addr;
# 缓存名称
proxy_cache tmpcache;
# 需要缓存的数据状态 需要缓存保留的时间
proxy_cache_valid any 1h;
# 代理地址
proxy_pass http://127.0.0.1:8080;
}
nginx
访问控制
deny
指令
allow
语法: allow address | CIDR | unix: | all;
默认值: —
配置段: http, server, location, limit_except
允许某个ip或者一个ip段访问.如果指定unix:,那将允许socket的访问.
注意:unix在1.5.1中新加入的功能,如果你的版本比这个低,请不要使用这个方法。
deny
语法: deny address | CIDR | unix: | all;
默认值: —
配置段: http, server, location, limit_except
Unix是20世纪70年代初出现的一个操作系统,除了作为网络操作系统之外,还可以作为单机操作系统使用。
CIDR一般指无类别域间路由。无类别域间路由(Classless Inter-Domain Routing、CIDR)是一个用于给用户分配IP地址以及在互联网上有效地路由IP数据包的对IP地址进行归类的方法。
nginx.conf
# 添加nginx扫描的文件
include blockips.conf;
blockips.conf
# 禁用访问
deny 192.168.1.101;
# 允许访问
allow 192.168.1.102;
nginx
负载均衡
1、默认分配
upstream ipaddr {
server 192.168.1.101:8080;
server 192.168.1.102:8081;
}
location / {
root html;
index index.html index.htm;
# 需要实现负载均衡的地址
proxy_pass http://ip;
}
2、按照一定比例轮询
upstream ipaddr {
# weight 的值越大 所请求到的几率越大
server 192.168.1.101:8080 weight=1;
server 192.168.1.102:8081 weight=2;
}
3、响应分配
upstream ipaddr {
# 公平地按照后端服务器的响应时间(rt)来分配请求,响应时间短即rt小的后端服务器优先分配请求
server 192.168.1.101;
server 192.168.1.102;
fair;
}
4、固定ip
分配
upstream ipaddr {
# 请求按照访问ip(即Nginx的前置服务器或者客户端IP)的hash结果分配,这样每个访客会固定访问一个后端服务器,可以解决session一致问题。
ip_hash;
server 192.168.1.101;
server 192.168.1.102;
}
5、请求结果分配
upstream ipaddr {
# 与ip_hash类似,但是按照访问url的hash结果来分配请求,使得每个url定向到同一个后端服务器,主要应用于后端服务器为缓存时的场景下。
server 192.168.1.101;
server 192.168.1.102;
server 192.168.1.103;
hash $request_uri;
hash_method crc32;
}
以上就是常用得一些nginx
功能分享,如果错误请指正,十分感谢!
学习这件事,不是缺乏时间,而是缺乏努力。
如果对编程感兴趣,请关注我的个人博客 https://www.lzmvlog.top/
来源:oschina
链接:https://my.oschina.net/u/4144979/blog/4911676