关于Nginx,在日常工作中你可能用到的操作就这些了

本文涉及的产品
传统型负载均衡 CLB,每月750个小时 15LCU
网络型负载均衡 NLB,每月750个小时 15LCU
应用型负载均衡 ALB,每月750个小时 15LCU
简介: 关于Nginx,在日常工作中你可能用到的操作就这些了

背景


最近,全球都在制裁 NginxClickHouse 的诞生地。


计算机技术是一门实践至上、理论与工程结合的学科,无论你是做后端开发、系统架构、大数据开发还是数据分析工作,鼓捣环境的能力还是要有的。我们一般的开发人员使用 Nginx 不过是配个反向代理,基本上就足够了。 Nginx 本身是一个非常强大的工具,作为一名没用过 Nginx 的小白或者初学者,由于没有系统地学习过 Nginx ,在面临 Nginx 有关需求的时候一般是这样:我有一个需求或问题,我只想知道如何快速实现/解决,即:你就告诉我怎么做吧。

image.png

我是一名非专业的运维人员,一般作为救火队员出现。。以下列出关于 Nginx 的常见需求,搞定这些问题后,应对日常的非专业单运维工作便不在话下。


  1. Nginx静态资源服务器如何配置?
  2. Nginx如何做反向代理?
  3. Nginx反向代理后,如何获取客户端实际IP?
  4. Nginx做负载均衡怎么配置?
  5. Nginx负载均衡/负载倾斜后,客户端如何知道访问的是哪个主机/服务?
  6. Nginx如何做二级域名转发?
  7. Nginx如何配置HTTPS以及证书?
  8. Nginx如何配置HTTP2?
  9. Nginx如何开启GZIP压缩?
  10. Nginx控制台的警告怎么处理?
  11. Nginx报错:(上传文件)请求的实体过大怎么办?
  12. Nginx如何隐藏版本号?


Note: 01. 修改完配置后,可通过nginx -t测试配置是否存在语法错误或者typo; 02. 修改完配置后,记得通过nginx -s reload刷新使配置生效;


Nginx静态资源托管


如今,越来越多的前端工程师也开始使用 NginxTengineOpenResty 这类工具了。一般是将一些静态资源,或者干脆就是完整的前端项目作为静态资源服务进行部署。


  • Nginx静态资源服务器
location / {
        root  /opt/reading-notes/frontend/dist;
        index  index.html index.htm;
    }
  • Nginx配置代理跨域
location /api  {
            include  uwsgi_params;
            rewrite  ^/api/(.*)$ /$1 break;
            proxy_pass   http://localhost:8000;
    }
  • Vue打包部署后,刷新页面404
try_files $uri $uri/ /index.html;


Nginx反向代理


这里直接插播一道面试题,问:什么是反向代理,什么是正向代理?



Nginx反向代理后,如何获取客户端实际IP


当我配置了反向代理后,系统日志拿到的客户端IP全是 127.0.0.1 ,我要如何获取客户端实际IP呢?


# 转发源IP,编辑vi /etc/nginx/nginx.conf,在对应的location下增加配置
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;


Nginx负载均衡


接触负载均衡,可能是你成为系统架构师(尤其是 Java 领域)的第一步。因为这个时候,便会衍生出当今计算机领域的一个核心关键词:“集群”。这跟人们的日常工作生活非常类似,一个人的力量是有限的,而一群人的智慧是无穷的。


  • 默认策略:轮询
upstream api-server {
        server 127.0.0.1:7000;
        server 127.0.0.1:8000;
    }
location /api  {
            include  uwsgi_params;
            rewrite  ^/api/(.*)$ /$1 break;
            proxy_pass   http://api-server;
    }
  • 修改策略:权重
upstream api-server {
        server 127.0.0.1:7000 weight=2;
        server 127.0.0.1:8000;
    }


Nginx负载均衡/负载倾斜后,客户端如何知道访问的是哪个主机/服务?


当我配置了负载均衡/负载倾斜后,我如何知道我访问的是哪个后端的主机/服务?

# 确定请求的响应来自于哪台主机,编辑vi /etc/nginx/nginx.conf,在对应的location下增加配置
add_header ServerIP $upstream_addr;

有了以上配置,可以在请求响应的头信息中看到 ServerIP 的信息。


Nginx二级域名转发


其实,所谓的二级域名转发,核心还是反向代理。



Nginx配置HTTPS加密传输


HTTPS (全称:Hyper Text Transfer Protocol over SecureSocket Layer),是以安全为目标的 HTTP 通道,在 HTTP 的基础上通过传输加密和身份认证保证了传输过程的安全性, HTTPS 的安全基础是 SSL 。实际中,我们一般是结合域名与 SSL 证书实现全站 HTTPS ,而且很多主流浏览器不推荐使用不安全的 HTTP 了。


Nginx配置HTTP2快速响应


HTTP/2HTTP 协议自 1999 年 HTTP 1.1 发布后的首个更新,主要基于 SPDY 协议。HTTP2的一些新特性:二进制分帧,多路复用,服务器推送,头部压缩等致力于加快请求的响应。我们实际中使用 HTTP2 结合 Undertow Web容器,实现对大量小图片的快速加载响应。


来自于《图解HTTP》中的一句话:


HTTP2的目标是改善用户在使用Web时的速度体验。


Nginx启用GZIP压缩


开始没启用 HTTP2 时,我们还采用过 GZIP 压缩来实现对较大响应体(json, js, css, text,具体多大时开始压缩可以自己配置)的压缩,这对带宽不富裕的小网站来说,是一种较好的解决方案;不过,开启 GZIP 压缩后,需要注意的是 CPU 与带宽之间的协调,因为压缩过程是要耗费 CPU 资源的,这就像我们常讲的“架构是一种权衡”类似。

# 编辑vi /etc/nginx/nginx.conf,在http下增加配置
    gzip on;
    gzip_buffers 32 4K;
    gzip_comp_level 8;
    gzip_min_length 1k;
    gzip_types application/json application/javascript text/css text/xml text/plain;
    gzip_disable "MSIE [1-6]\.";
    gzip_vary on;


Nginx控制台警告


警告虽然不影响实际服务的运行,可以忽略掉;但是对于患有强迫症的小伙伴来说,消除警告也是必要的(另外,我们有些前端同学对浏览器控制台的无效打印、警告是要求不允许出现的)。


nginx: [warn] could not build optimal proxy_headers_hash, you should increase either proxy_headers_hash_max_size: 512 or proxy_headers_hash_bucket_size: 64; ignoring proxy_headers_hash_bucket_size

# 编辑vi /etc/nginx/nginx.conf,在http下增加配置:proxy_headers_hash_bucket_size 1024;
proxy_headers_hash_bucket_size 1024;

nginx: [warn] could not build optimal types_hash, you should increase either types_hash_max_size: 2048 or types_hash_bucket_size: 64; ignoring types_hash_bucket_size

# 编辑vi /etc/nginx/nginx.conf,在http下增加配置:types_hash_bucket_size 1024;
types_hash_bucket_size 1024


请求响应报错


这主要在上传文件时出现, SpringBoot 项目限制了上传文件的大小,默认为1M,当用户上传了超过1M大小的文件时,可通过以下配置修改解决 SpringBoot 报错。


spring:
  servlet:
    multipart:
      maxFileSize: 10MB
      maxRequestSize: 30MB

SpringBoot 关于文件上传大小限制报错解决后, Nginx 又报错了:413 Request Entity Too Large,因为 Nginx 默认的 request body 也为1M。

413 Request Entity Too Large

# 编辑vi /etc/nginx/nginx.conf,在http下或者对应的反向代理location下增加配置:client_max_body_size 10m;
client_max_body_size 10m;


Nginx隐藏版本号


默认在请求的头信息中可以看到 Nginx 的版本信息。 Nginx 的有些版本有漏洞,而有些版本没有。这样直接暴露出版本号就容易成为攻击者可利用的信息。所以,从安全的角度来说,隐藏版本号会相对安全些。

image.png

# 在http部分配置:server_tokens  off;
http {
    sendfile            on;
    tcp_nopush          on;
    tcp_nodelay         on;
    keepalive_timeout   65;
    types_hash_max_size 4096;
    server_tokens  off;
}

image.png



相关实践学习
SLB负载均衡实践
本场景通过使用阿里云负载均衡 SLB 以及对负载均衡 SLB 后端服务器 ECS 的权重进行修改,快速解决服务器响应速度慢的问题
负载均衡入门与产品使用指南
负载均衡(Server Load Balancer)是对多台云服务器进行流量分发的负载均衡服务,可以通过流量分发扩展应用系统对外的服务能力,通过消除单点故障提升应用系统的可用性。 本课程主要介绍负载均衡的相关技术以及阿里云负载均衡产品的使用方法。
目录
相关文章
|
Web App开发 安全 应用服务中间件
|
网络协议 Java 关系型数据库
Linux常用命令大全(极简速查版本)(包含操作nginx、mysql)
Linux常用命令大全(极简速查版本)(包含操作nginx、mysql)
122 0
|
负载均衡 算法 Java
Nginx搭建负载均衡详细操作
Nginx搭建负载均衡详细操作
350 0
Nginx搭建负载均衡详细操作
|
运维 Unix 应用服务中间件
深入浅出学习透析 Nginx 服务器的基本原理和配置指南「运维操作实战篇」
深入浅出学习透析 Nginx 服务器的基本原理和配置指南「运维操作实战篇」
654 0
深入浅出学习透析 Nginx 服务器的基本原理和配置指南「运维操作实战篇」
让我直接涨薪5K的Nginx/OpenResty详解,NginxLua操作Redis有多牛
实战案例运行准备:本节涉及的配置文件为源码工程的nginxredis-demo.conf文件。在运行本节实例前需要修改启动脚本openresty-start.bat(或openresty-start.sh)中的PROJECT_CONF变量的值,将其改为nginx-redis-demo.conf,然后重启OpenRestry。
|
网络协议 应用服务中间件 开发工具
IM开源项目OpenIM部署文档-从准备工作到nginx配置
IM开源项目OpenIM部署文档-从准备工作到nginx配置 2022-11-14 22:27·OpenIM 一、准备工作 运行环境 linux系统即可, Ubuntu 7.5.0-3ubuntu1~18.04最优 图片视频文件存储 支持cos/MinIO https/wss协议 1. 需申请域名或者子域名(web im端登录注册及im 服务端使用)建议:web.xx.xx 2. 若使用MinIO作为对象存储,建议:storage.xx.xx 3. 管理后台子域名,建议:admin.xx.xx 4. 部署nginx,并配置证书。 离线推送(app被杀死或未启动时推送) 国内申请
753 0
IM开源项目OpenIM部署文档-从准备工作到nginx配置
|
应用服务中间件 程序员 nginx
如何自定义好看的404页面?云服务器+Nginx中加3行配置搞定,小白也能流畅操作
我们来自己设计一个404网页,来给用户一个适当的报错页面,而不是直接报一个打不开的错误。
245 0
如何自定义好看的404页面?云服务器+Nginx中加3行配置搞定,小白也能流畅操作
|
安全 Java 数据建模
Nginx如何支持HTTPS?手把手教会你每一步操作都贼简单
随着我们网站用户的增多,我们会逐渐意识到HTTPS加密的重要性。在不修改现有代码的情况下,要从HTTP升级到HTTPS,让Nginx支持HTTPS是个很好的选择。今天我们来讲下如何从Nginx入手,从HTTP升级到HTTPS,同时支持静态网站和SpringBoot应用,希望对大家有所帮助! 生成SSL自签名证书 虽然自签名证书浏览器认为并不是安全的,但是学习下SSL证书的生成还是很有必要的! 首先创建SSL证书私钥,期间需要输入两次用户名和密码,生成文件为blog.key;
Nginx如何支持HTTPS?手把手教会你每一步操作都贼简单
|
应用服务中间件 程序员 Linux
程序员的nginx技能包(2)——nginx安装、简单操作、helloworld欢迎页实现
本文介绍的是windows环境下nginx安装与第一个网页的配置使用,linux下差不多少,请诸位自行研究。 安装 nginx的安装总结成一句话,不用安装。 下载解压即可,点此下载。 此处下载的版本为1.15.7版本,此处我下载后解压到H盘根目录下。
335 0
程序员的nginx技能包(2)——nginx安装、简单操作、helloworld欢迎页实现
|
前端开发 应用服务中间件 nginx
【Nginx优化】Nginx openresty操作
【Nginx优化】Nginx openresty操作
567 0
【Nginx优化】Nginx openresty操作