前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >nginx学习

nginx学习

作者头像
是小张啊喂
发布于 2021-08-09 09:42:43
发布于 2021-08-09 09:42:43
40500
代码可运行
举报
文章被收录于专栏:软件软件
运行总次数:0
代码可运行

什么是nginx?

Nginx是一款轻量级的Web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,在BSD-like 协议下发行。其特点是占有内存少,并发能力强,事实上nginx的并发能力在同类型的网页服务器中表现较好

nginx安装

1、手动安装
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#安装 nginx 
$ yum install nginx

#启动nginx
$ systemctl start nginx

#加入开机启动
$ systmctl enable nginx

#查看nginx的状态
$ systemctl status nginx

#检查 nginx 文件语法是否此错误
$ nginx -t

# 重载 nginx 配置
$ nginx -s reload
2、docker安装
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 拉取镜像
$ 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安装
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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解析到域名上

将域名重定向到当前的地址和端口

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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搭建文件服务器

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
location /images/ {
    root   /root/;
    autoindex on;
}

root 配置的意思是,会在root配置的目录后跟上URL,组成对应的文件路径。

意思就是我们在浏览器输入的这个地址实际访问的是

root/images

会把我们的location后面的/images拼到实际访问的路径之后

root/images/images

1、处理方法是把root后面的images去掉

2、root替换成alias

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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包含以下几种状态:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
·MISS 未命中,请求被传送到后端
·HIT 缓存命中
·EXPIRED 缓存已经过期请求被传送到后端
·UPDATING 正在更新缓存,将使用旧的应答
·STALE 后端将得到过期的应答
配置
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 开启gzip
gzip  on;
# 启用gzip压缩的最小文件,小于设置值的文件将不会压缩
gzip_min_length 1k;
# gzip 压缩级别,1-10,数字越大压缩的越好,也越占用CPU时间。一般设置12
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;
    }
关于gzip命令说明
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
gzip配置的常用参数

gzip on|off; #是否开启gzip

gzip_buffers 32 4K| 16 8K #缓冲(压缩在内存中缓冲几块? 每块多大?)

gzip_comp_level [1-9] #推荐6 压缩级别(级别越高,压的越小,越浪费CPU计算资源)

gzip_disable #正则匹配UA 什么样的Uri不进行gzip

gzip_min_length 200 # 开始压缩的最小长度(再小就不要压缩了,意义不在)

gzip_http_version 1.0|1.1 # 开始压缩的http协议版本(可以不设置,目前几乎全是1.1协议)

gzip_proxied # 设置请求者代理服务器,该如何缓存内容

gzip_types text/plain application/xml # 对哪些类型的文件用压缩 如txt,xml,html ,css

gzip_vary on|off # 是否传输gzip压缩标志

nginx访问控制

deny指令
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 添加nginx扫描的文件
include blockips.conf;

blockips.conf

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 禁用访问
deny 192.168.1.101;
# 允许访问
allow 192.168.1.102;

nginx负载均衡

1、默认分配
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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、按照一定比例轮询
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
upstream ipaddr { 
	# weight 的值越大 所请求到的几率越大
    server 192.168.1.101:8080 weight=1; 
    server 192.168.1.102:8081 weight=2; 
} 
3、响应分配
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
upstream ipaddr {
    # 公平地按照后端服务器的响应时间(rt)来分配请求,响应时间短即rt小的后端服务器优先分配请求
    server 192.168.1.101;
    server 192.168.1.102;
    fair;
}
4、固定ip分配
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
upstream ipaddr {
    # 请求按照访问ip(即Nginx的前置服务器或者客户端IP)的hash结果分配,这样每个访客会固定访问一个后端服务器,可以解决session一致问题。
    ip_hash;
    server 192.168.1.101;
    server 192.168.1.102;
}
5、请求结果分配
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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功能分享,如果错误请指正,十分感谢!

学习这件事,不是缺乏时间,而是缺乏努力。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2021-01-12,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
PAT备考经验&相关信息[通俗易懂]
在9月8号下午的PAT考试中,我幸运的拿到了满分,用时1小时45分钟,排名第五,算是成功迈出了转专业的第一步。按照惯例应该嘚瑟一波,然而身边并没有人考这个,转念一想,不如把考试日志和备考经验教训记录下来,以期看见此文的后来者能少走一些弯路,更加高效的刷题学习(虽然可能并没有人能看到 _(:△」∠)_ )。
全栈程序员站长
2022/07/23
1.1K0
PAT考试经验总结(甲乙级均适用)~~想满分的请看这里!~~
emmmmmmm 总算是考了个满分,不用以后再交PAT考场一日游入场费了T ^ T 第一次在去年秋天,被第一题狼人杀给干掉了〒▽〒,最后得了81分,第二次就是今年春季,侥幸满分通过了= = 为了总结自己踩过的坑,给后面要考的同学们提供一些微薄的帮助,遂作此文。
全栈程序员站长
2022/08/11
1.7K1
PAT考试经验总结(甲乙级均适用)~~想满分的请看这里!~~
VIP保过班高效备考方法
对于完全不懂C语言的考生,先需要学习C语言基础。 1. 仔细阅读专属教材。 在阅读教材时,结合视频课堂,认真的读懂每个知识点。其中第2、3、4、5、6、7、8、9、11、13章是重点,应当稍微放慢速度。必要时做笔记。 2. 练习课后习题 。
用户6755376
2020/02/24
5570
CISSP证书考试的一些自身经验分享
报班学习大约从2020年2月开始,最开始是按照培训机构的计划,看录播+实况课程+OSG书籍;本来打算五月底参加考试,但没预约好,所以改到七月。但是在接下来的三个月里遇到了一些私事,导致时间不够,没有做好准备,所以推迟到十月中旬。九月份做好考前准备工作,由于频繁出差和疾病暴发,决定再次推迟到十二月底。
技术分享达人
2021/01/18
1K0
经验分享 | 通往CISSP成功之路
十年之前,走出象牙塔还是葱葱少年。十年之后,面对体重秤上的数字俨然已成油腻中年男。十年之间,自己以从事信息安全测评为主,做过等保、做过风险评估、做过渗透测试、做过应急响应,同时为用户建立信息安全体系,从技术及管理为用户解决自身的痛点。十年间,见证了网络安全在国内的崛起与快速发展。面对过往,拿下CISSP也许是对自己从业十年最好的总结。 一、为何选择CISSP 人生需要总结,知识需要形成体系,需要做到知其然,知其所以然。近几年,参加了高级等保测评师、CISAW、CISP等信息安全相关培训,
FB客服
2018/02/24
1.3K0
经验分享 | 通往CISSP成功之路
记第一次参加PAT(附题解)
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
喜欢ctrl的cxk
2019/11/08
9080
记第一次参加PAT(附题解)
项目管理PMP考试备考经验
作为一名程序员客户端开发,之所以报考PMP是因为在上家公司从事了项目管理的工作,接触了一些项目管理的知识,感觉项目管理的一些理论对于管理水平提升很有用,所以打算系统的学习一下项目管理并且考取证书。
Helloted
2022/06/08
5740
项目管理PMP考试备考经验
软考高项备考经验分享
在备考被论文卡两次后,这次终于通过了高项,分不是很高,比较幸运,对这次考试做个总结与分享,希望对同学们有所帮助。
GoodTime
2024/06/29
4220
软考高项备考经验分享
【PAT乙级】解码PAT准考证
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
喜欢ctrl的cxk
2019/11/08
1.3K0
【PAT乙级】解码PAT准考证
软考复盘:我的一些复习经验分享
大家好,我是Edison。最近几天阳了,全身乏力头疼,38.5度高烧,好在症状较轻,经过一天躺平加吃了芬必得后(芬必得真乃神药),退烧了,也不乏力了,也就趁娃娃睡觉时间跟大家分享一下软考的复习经验,相信大家已经期待已久了。
Edison Zhou
2022/12/30
1.4K0
软考复盘:我的一些复习经验分享
【推荐阅读】刷最近4年真题,最后阶段强力冲刺2023年CSP-J/S第一轮经验分享免费版
孩子们如果准备的不充分,这段时间还是要加把劲冲刺下,毕竟学习了很长时间,还是要去CSP-J/S战场上检验自己的学习成果。
小码匠
2023/09/06
6470
【推荐阅读】刷最近4年真题,最后阶段强力冲刺2023年CSP-J/S第一轮经验分享免费版
我的ElasticSearch认证工程师之路
我是2020年4月30日通过的认证,应群主之邀,写一篇经验分享,也是给我的认证之路做一个小结。其实和很多群友想的不一样,我平常在工作中要写DSL的机会不多,和ES相关的,更多的是评估容量和成本,决定一个场景到底要不要用,要设计哪些功能。虽然平时零零碎碎地看了很多ES相关的知识,但总觉得不成体系,考虑问题的时候会发现有些内容自己是不知道的。因此想考一个Elastic认证,借这个机会全面地学习和了解ES的整个体系。
铭毅天下
2020/05/22
7480
我的ElasticSearch认证工程师之路
PAT乙级题目答案汇总PAT (Basic Level) Practice (中文)
专栏链接 https://blog.csdn.net/shiliang97/category_9294537_2.html
韩旭051
2020/02/18
3.2K0
软考软件设计师30天备考指南
合理安排学习时间,每天保证2 - 3小时(在职备考)或4 - 6小时(脱产备考)的学习时间。周末可以集中攻克下午题,如周六练数据流图,周日练算法。
码事漫谈
2025/04/23
1370
软考软件设计师30天备考指南
卷王 ,不能倒在刷力扣的路上
最近在一些群聊、私聊中遇到很多小伙伴的一个问题就是:刷题,大家也都重视到算法刷题对冲击大厂的重要性,越来越多的人开始卷起来了!
bigsai
2021/10/20
1.3K0
【华为OD机试】全流程解析+经验分享,题型分享,防作弊指南
华为 OD 机试是指华为公司的在线笔试,是华为公司用于筛选招聘岗位候选人的一种考核方式。
梦想橡皮擦
2023/04/30
8.2K0
【华为OD机试】全流程解析+经验分享,题型分享,防作弊指南
考研经验-东南大学软件学院软件工程(这些基础课和专业课的各种坑和复习技巧你应该知道)
关于本人考研过程中整理的关于基础课和专业课的思维导图笔记,可查看 考研科目 知识点 思维导图 点击获取全部导图和配套OneNote笔记
全栈程序员站长
2022/11/01
8730
考研经验-东南大学软件学院软件工程(这些基础课和专业课的各种坑和复习技巧你应该知道)
C语言介绍
以下东东转自百度百科 C语言是一种计算机程序设计语言,它既具有高级语言的特点,又具有汇编语言的特点。它由美国贝尔实验室的Dennis M. Ritchie于1972年推出,1978年后,C语言已先后被移植到大、中、小及微型机上,它可以作为工作系统设计语言,编写系统应用程序,也可以作为应用程序设计语言,编写不依赖计算机硬件的应用程序。它的应用范围广泛,具备很强的数据处理能力,不仅仅是在软件开发上,而且各类科研都需要用到C语言,适于编写系统软件,三维,二维图形和动画,具体应用比如单片机以及嵌入式系统开发。 中文
landv
2018/05/24
3.2K0
Elastic认证工程师考试经验分享
笔者于2019年10月参加并通过了Elastic Certified Engineer Exam, 在准备考试的三四个月的时间内,对考试的要求,考试的准备,考试的流程等有一些了解,因此总结这篇文章,希望对后续参加考试的朋友有一定的帮助。
michelmu
2019/10/31
4K0
Elastic认证工程师考试经验分享
干货 | 95后运维小哥20天+通过Elastic认证考试经验分享
早上,收到95后的星友[在路上(昵称)]发的动态,得知其已经通过了Elastic认证考试。
铭毅天下
2020/03/04
1.8K0
推荐阅读
相关推荐
PAT备考经验&相关信息[通俗易懂]
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验