初学者如何学习Nginx代理?查阅这篇Nginx进阶配置实战指南即可!

2026-05-19 12:231阅读0评论SEO教程
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计3156个文字,预计阅读时间需要13分钟。

初学者如何学习Nginx代理?查阅这篇Nginx进阶配置实战指南即可!

基础学习与实战指南

1. Nginx基础安装与配置详解 - 链接:[https://blog.weiyigeek.top/2019/9-1-121.](https://blog.weiyigeek.top/2019/9-1-121.)

2. Nginx进阶学习之最佳配置实践指南 - 链接:[https://blog.weiyigeek.top/2019/9-1-124.](https://blog.weiyigeek.top/2019/9-1-124.)

3. Nginx模块学习与使用实践指南 - 链接:[https://blog.weiyigeek.top/](https://blog.weiyigeek.top/)

前置基础知识学习

  • 1.Nginx基础安装与配置详细 blog.weiyigeek.top/2019/9-1-121.html

  • 2.Nginx进阶学习之最佳配置实践指南 blog.weiyigeek.top/2019/9-1-124.html

  • 3.Nginx模块学习使用实践指南 blog.weiyigeek.top/2021/3-1-633.html

  • 4.Nginx安全加固与性能调优最佳指南 blog.weiyigeek.top/2019/9-2-122.html

  • 5.Nginx常遇问题入坑出坑整理 blog.weiyigeek.top/2020/9-2-622.html

0x00 编译实践

描述:在企业线上生产环境中推荐进行Nginx编译安装,可以按照业务侧重点进行相应 Nginx 编译参数配置,所以编译参数不是功能加的越多越好,应该尽可能少编译模块不用的最好不要加入,本小结将以最新的Nginx版本以及依赖版本进行编译演示。

Nginx-1.21.6+OpenSSL-1.1.1n

最新源码构建安装整理,当前最新版本nginx-1.21.6,实践时间
版本说明: pcre-8.45 、zlib-1.2.11、openssl-1.1.1n、nginx-1.21.6。

官方安装参考地址: docs.nginx.com/nginx/admin-guide/installing-nginx/installing-nginx-open-source/#downloading-the-sources

步骤 01.在从源代码编译 NGINX Open Source 之前,您需要为其依赖项安装库:

  • PCRE – 支持正则表达式,NGINX Core 和 Rewrite 模块需要。

# pcre.org/ # sourceforge.net/projects/pcre/files/ wget -c nchc.dl.sourceforge.net/project/pcre/pcre/8.45/pcre-8.45.tar.bz2 tar -jxf pcre-8.45.tar.bz2 && cd pcre-8.45 ./configure make && sudo make install

  • zlib – 支持标头压缩, NGINX Gzip 模块需要。

# www.zlib.net/ wget -c zlib.net/zlib-1.2.11.tar.gz tar -zxf zlib-1.2.11.tar.gz && cd zlib-1.2.11 ./configure make && sudo make install

  • OpenSSL – 支持 HTTPS 协议, NGINX SSL 模块和其他模块需要。

# www.openssl.org/source/ wget -c www.openssl.org/source/openssl-1.1.1n.tar.gz tar -zxf openssl-1.1.1n.tar.gz && cd openssl-1.1.1n ./config --prefix=/usr/local/openssl make && sudo make install # lib 库加载到系统 echo "/usr/local/openssl/lib" >> /etc/ld.so.conf.d/libc.conf ldconfig # 可以看到当下系统的Openssl版本已经更新到最新 # root@weiyigeek-top:/usr/local/openssl/bin# openssl version # OpenSSL 1.1.1n 15 Mar 2022

步骤 02.从 nginx.org 下载稳定版和主线版本的源代码文件,要下载并解压最新主线版本的源代码,请运行:

# nginx.org sudo mkdir -vp /usr/local/nginx/module /usr/lib/nginx/modules /var/cache/nginx/{client_temp,proxy_temp,fastcgi_temp,uwsgi_temp,scgi_temp} wget nginx.org/download/nginx-1.21.6.tar.gz tar zxf nginx-1.21.6.tar.gz && cd nginx-1.21.6 $ ./configure \ --prefix=/usr/local/nginx \ --with-pcre=../pcre-8.45 \ --with-zlib=../zlib-1.2.11 \ --user=ubuntu --group=ubuntu \ --sbin-path=/usr/sbin/nginx \ --conf-path=/usr/local/nginx/nginx.conf \ --pid-path=/usr/local/nginx/nginx.pid \ --error-log-path=/var/log/nginx/error.log \ --github.com/weiyigeek/SecOpsDev/Application/Web/Nginx/nginxVirtualHost-v1.sh

#!/bin/bash #@Desc:Nginx多实例部署虚拟主机 #@Author:WeiyiGeek #@CreatTime:2020年3月8日 12点06分 #@Site:WeiyiGeek.top #@Test_Linux: Linux weiyigeek 3.10.0-693.el7.x86_64 #1 SMP Tue Aug 22 21:09:27 UTC 2017 x86_64 x86_64 x86_64 GNU/Linux #@release:CentOS Linux release 7.4.1708 (Core) ## Define nginx variable NGX_VER=1.16.1 NGX_URI="nginx.org/download/nginx-${NGX_VER}.tar.gz" NGX_SRC="nginx-${NGX_VER}.tar.gz" NGX_NAME=${NGX_SRC%.tar.gz} NGX_DIR="/usr/local/nginx/${NGX_VER}" NGX_ARGS="--prefix=${NGX_DIR} --user=nginx --group=nginx --with-tomcat:8080/index } # 第二个必选规则是处理静态文件请求,这是nginx作为tomcat:8080/ }
Nginx 之 规则判断表达式浅析

Nginx 常用判断表达式如下:

  • -f和!-f: 用来判断是否存在文件
  • -d和!-d:用来判断是否存在目录
  • -e和!-e:用来判断是否存在文件或目录
  • -x和!-x:用来判断文件是否可执行
  • 除此之外我们还可以使用上一小节的正则匹配符进行判断。

nginx 全局变量一览:

arg_PARAMETER # 这个变量包含GET请求中,如果有变量PARAMETER时的值。 args # 这个变量等于请求行中(GET请求)的参数,如:foo=123&bar=blahblah; binary_remote_addr # 二进制的客户地址。 body_bytes_sent # 响应时送出的body字节数数量。即使连接中断,这个数据也是精确的。 content_length # 请求头中的Content-length字段。 content_type # 请求头中的Content-Type字段。 cookie_COOKIE # cookie COOKIE变量的值 document_root # 当前请求在root指令中指定的值。 document_uri # 与uri相同。 host # 请求主机头字段,否则为服务器名称。 hostname # 设置为gethostname返回的机器主机名 weiyigeek.top:8080/test1/test2/test.php.

$host:weiyigeek.top $server_port:8080 $request_uri:weiyigeek.top:8080/test1/test2/test.php $document_uri:/test1/test2/test.php $document_root:/data/nginx/html $request_filename:/data/html/test1/test2/test.php

简单示例:

  • 1.判断请求的静态资源文件是否是存在的,如不存在则返回403.

location ~* \.(js|css|jpg|jpeg|gif|png|swf)$ { if (-f $request_filename) { return 403; break; } }

  • 2.判断Nginx全局变量并进行跳转到指定页面。

if ( $host !~* weiyigeek\.top ) { return 301 space.bilibili.com/385802642; }

  • 3.文件反盗链并设置过期时间

location ~*^.+\.(jpg|jpeg|gif|png|swf|rar|zip|css|js)$ { valid_referers none blocked *.weiyigeek.top localhost 127.0.0.1; if ($invalid_referer) { rewrite ^/ weiyigeek.top/wechat.html; return 412; break; } root /usr/local/nginx/html access_log off; expires 3d; break; }

  • 4.自定义变量判断跳转到指定页面.

# 仅允许222.222.222.222或者内网的两个IP访问,其他IP都rewrite到停服页面 if ( $remote_addr = 222.222.222.222){set $my_ip 1;} if ( $remote_addr = 192.168.1.170 ){ set $my_ip 1;} if ( $remote_addr = 192.168.1.169 ){ set $my_ip 1;} if ( $my_ip != 1) {rewrite ^/design/(.*)\.php$ /weiyigeek.html?$1&;} #将*.php转到tingfu.html

温馨提示: 此处以Nginx暴露给互联网, 所以利用 $remote_addr 变量获取访问者地址, 如果用了负载均衡的话此处应该是$$host$request_uri; } # www.weiyigeek.top$request_uri; }

ReWrite 重写语法示例
rewrite 正则表达式以及其可用参数:

  • last : 基本上都用这个Flag。
  • break : 中止 Rewirte 不在继续匹配
  • redirect : 返回临时重定向的HTTP状态302
  • permanent : 返回永久重定向的HTTP状态301

# www.weiyigeek.top$1 permanent; } } # 利用重写规则防止盗链 location ~* \.(gif|jpg|png|svg|css|js)$ { valid_referers none blocked *.weiyigeek.top localhost 127.0.0.1 server_names ~\.google\. ~\.baidu\.; if ($invalid_referer) { rewrite ^/ www.weiyigeek.top/403.jpg; } } # 利用重写功能可将网页中旧的访问目录重写到新的访问路径 # 例如, 如果访问blogwww.weiyigeek.top/2020/10/515.html 则将显示首页。 if ( $document_uri ~* /([0-9]+)/([0-9]+)/([0-9]+)\.html$) { rewrite ^/ /index.html last; }

温馨提示:301 与 302 状态码的不同区别。

  • 301 redirect: 301 代表永久性转移( Permanently Moved ) - 网站SEO推荐。
  • 302 redirect: 302 代表暂时性转移( Temporarily Moved )

Nginx 之 SSL 证书安全配置浅析

描述: 通常为了保证网站数据在传输过程中不被窃取和篡改,我们需要为其配置SSL证书,而在Nginx中配置方法是非常的简单的,不过最重要的还是你要生成私钥以及证书申请文件csr向证书颁发机构生成网站证书。

# Permanent Redirect for HTTP to HTTPS server { listen 80; listen [::]:80; server_name weiyigeek.top; return 301 $host$request_uri; } server { listen 443 ssl ssl-config.mozilla.org/ffdhe2048.txt > /path/to/dhparam ssl_dhparam /path/to/dhparam; # 兼容性较为通用的SSL协议与加密算法套件 ssl_protocols TLSv1 TLSv1.1 TLSv1.2 TLSv1.3; ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE:ECDH:AES:HIGH:EECDH+CHACHA20:EECDH+CHACHA20-draft:EECDH+AES128:RSA+AES128:EECDH+AES256:RSA+AES256:EECDH+3DES:RSA+3DES:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:!NULL:!aNULL:!eNULL:!EXPORT:!PSK:!ADH:!DH:!DES:!MD5:!RC4; # 安全配置: ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4:!DH:!DHE; # 证书常规握手加密算法方式共十八个,ECDHE、DHE、AES开头分别6个 ; ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA256:ECDHE-RSA-AES256-SHA:ECDHE-RSA-AES128-SHA:DHE-RSA-AES256-SHA256:DHE-RSA-AES128-SHA256:DHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA:AES256-GCM-SHA384:AES128-GCM-SHA256:AES256-SHA256:AES128-SHA256:AES256-SHA:AES128-SHA:HIGH:!NULL:!aNULL:!eNULL:!EXPORT:!PSK:!ADH:!DES:!MD5:!RC4; # 为了兼容性推荐服务器自动选择要使用的算法套件 ssl_prefer_server_ciphers on; # replace with the IP address of your resolver resolver 223.6.6.6 8.8.8.8 192.168.12.254; }

补充说明: 为Nginx服务器配置RSA与ECDSA双证书的两种方式。

# 1.首先是将两个证书链都加入 Nginx 的配置文件 ssl_certificate example.com.rsa.crt; ssl_certificate_key example.com.rsa.key; ssl_certificate example.com.ecdsa.crt; ssl_certificate_key example.com.ecdsa.key; # 2.或者使用 CT 的话有两种方法,一个是将两个证书的 CT 信息放到同一目录,并做如下设置,Nginx CT 模块会自动在这个目录下查找相应证书的 CT 信息并发送验证: ssl_ct on; ssl_ct_static_scts /path/to/sct/dir; # 我们也可以单独配置每个证书的 CT 文件 ssl_ct on; ssl_certificate example.com.rsa.crt; ssl_certificate_key example.com.rsa.key; ssl_ct_static_scts xample.com.rsa.scts; ssl_certificate example.com.ecdsa.crt; ssl_certificate_key example.com.ecdsa.key; ssl_ct_static_scts example.com.ecdsa.scts;
Nginx 之 资源压缩配置浅析

描述: 为了降低服务器带宽压力以及优化响应速度, 通常我们需要在Nginx服务器配置中为其开启gzip压缩,

配置示例:

# 开启gzip gzip on; # 启用gzip压缩的最小文件,小于设置值的文件将不会压缩 gzip_min_length 2k; # gzip 压缩级别,1-10,数字越大压缩的越好,也越占用CPU时间,后面会有详细说明 gzip_comp_level 2; # 进行压缩的文件类型,javascript有多种形,其中的值可以在 mime.types 文件中找到。 gzip_types text/plain application/javascript application/x-javascript text/css application/xml text/javascript application/x-blog.weiyigeek.top/img/avatar.jpg URL:

HTTP/1.1 304 Not Modified Server: nginx Date: Fri, 01 Apr 2022 09:19:09 GMT Last-Modified: Wed, 30 Mar 2022 15:42:30 GMT Connection: keep-alive ETag: "62447a66-35db" Expires: Fri, 08 Apr 2022 09:19:09 GMT # 表示资源过期时间,由当前访问时间加上max-age指令值所得 Cache-Control: max-age=604800 # 使用max-age指令指定组件被缓存多久,负数表示no-cache,正数或零表示max-age=time Access-Control-Allow-Origin: *.weiyigeek.top Access-Control-Allow-Methods: GET,POST Access-Control-Allow-Headers: DNT,X-Mx-ReqToken,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Authorization

实践示例:

# 网页资源缓存 location ~* \.(xml|html|htm)$ { # 资源决绝对目录设置 root /var/www/html; # 日志文件的相对路径或完整路径 access_log /path/to/file.log; # 开启日志记录 access_log on; # 设置过期时间 expires 24h; } # 样式、JS、图片资源缓存 location ~* \.(css|js|ico|gif|jpg|jpeg|png)$ { root /var/www/html/res; # 禁用404错误日志 log_not_found off; # 关闭日志 access_log off; # 缓存时间7天 expires 7d; } # 字体资源缓存 location ~* \.(eot|ttf|otf|woff|woff2|svg)$ { root /var/www/html/static; log_not_found off; access_log off; expires max; }
Nginx 之 反向代理资源基本缓存配置

描述: 在 Nginx 中往往我们会对指定站点进行反代(反向代理), 而在反代站点中存在动态资源与静态资源,我们可以使用下述指令开启简单的缓存配置。

首先我们需要了解一下三种缓存类型:

  • 客户端缓存
  • 代理缓存(Proxy Cache)
  • 服务端缓存

这里主要讲解Nginx作为代理服务器进行代理缓存的配置采用的参数以及示例:

  • 1.proxy_cache:定义用于缓存的共享内存区域。同一个区域可以用于多个地方

Syntax: proxy_cache zone | off; Default: proxy_cache off; Context: 127.0.0.1:9090; proxy_cache_key $request_uri; proxy_cache cache_$disk; }

实践示例:

  • 示例1.

proxy_cache_path /path/to/cache levels=1:2 keys_zone=mycache:10m max_size=10g inactive=60m use_temp_path=off; upstream my_upstream { server 192.168.1.20:8080 weight=5 max_fails=5 fail_timeout=30s; server 192.168.1.10:8080 weight=5 max_fails=5 fail_timeout=30s; } server { location / { proxy_cache mycache; proxy_pass my_upstream; } }

  • 示例2:

weiyigeek; proxy_cache_valid 200 304 12h; proxy_cache_valid any 10m; proxy_cache_key $host$uri$is_args$args; proxy_cache_purge $purge_method; add_header Nginx-Cache "$upstream_cache_status"; proxy_net_upstream error timeout invalid_header blog.weiyigeek.top/2019/9-1-124.html

文章书写不易,如果您觉得这篇文章还不错的,请给这篇专栏 (人间五大情),这将对我的肯定,谢谢!。

本文章来源 我的Blog站点 或 WeiyiGeek 公众账号 以及 我的BiliBili专栏 (技术交流、友链交换请邮我哟),谢谢支持!(๑′ᴗ‵๑) ❤
欢迎各位志同道合的朋友一起学习交流,如文章有误请留下您宝贵的知识建议,通过邮箱联系我哟!

初学者如何学习Nginx代理?查阅这篇Nginx进阶配置实战指南即可!

本文共计3156个文字,预计阅读时间需要13分钟。

初学者如何学习Nginx代理?查阅这篇Nginx进阶配置实战指南即可!

基础学习与实战指南

1. Nginx基础安装与配置详解 - 链接:[https://blog.weiyigeek.top/2019/9-1-121.](https://blog.weiyigeek.top/2019/9-1-121.)

2. Nginx进阶学习之最佳配置实践指南 - 链接:[https://blog.weiyigeek.top/2019/9-1-124.](https://blog.weiyigeek.top/2019/9-1-124.)

3. Nginx模块学习与使用实践指南 - 链接:[https://blog.weiyigeek.top/](https://blog.weiyigeek.top/)

前置基础知识学习

  • 1.Nginx基础安装与配置详细 blog.weiyigeek.top/2019/9-1-121.html

  • 2.Nginx进阶学习之最佳配置实践指南 blog.weiyigeek.top/2019/9-1-124.html

  • 3.Nginx模块学习使用实践指南 blog.weiyigeek.top/2021/3-1-633.html

  • 4.Nginx安全加固与性能调优最佳指南 blog.weiyigeek.top/2019/9-2-122.html

  • 5.Nginx常遇问题入坑出坑整理 blog.weiyigeek.top/2020/9-2-622.html

0x00 编译实践

描述:在企业线上生产环境中推荐进行Nginx编译安装,可以按照业务侧重点进行相应 Nginx 编译参数配置,所以编译参数不是功能加的越多越好,应该尽可能少编译模块不用的最好不要加入,本小结将以最新的Nginx版本以及依赖版本进行编译演示。

Nginx-1.21.6+OpenSSL-1.1.1n

最新源码构建安装整理,当前最新版本nginx-1.21.6,实践时间
版本说明: pcre-8.45 、zlib-1.2.11、openssl-1.1.1n、nginx-1.21.6。

官方安装参考地址: docs.nginx.com/nginx/admin-guide/installing-nginx/installing-nginx-open-source/#downloading-the-sources

步骤 01.在从源代码编译 NGINX Open Source 之前,您需要为其依赖项安装库:

  • PCRE – 支持正则表达式,NGINX Core 和 Rewrite 模块需要。

# pcre.org/ # sourceforge.net/projects/pcre/files/ wget -c nchc.dl.sourceforge.net/project/pcre/pcre/8.45/pcre-8.45.tar.bz2 tar -jxf pcre-8.45.tar.bz2 && cd pcre-8.45 ./configure make && sudo make install

  • zlib – 支持标头压缩, NGINX Gzip 模块需要。

# www.zlib.net/ wget -c zlib.net/zlib-1.2.11.tar.gz tar -zxf zlib-1.2.11.tar.gz && cd zlib-1.2.11 ./configure make && sudo make install

  • OpenSSL – 支持 HTTPS 协议, NGINX SSL 模块和其他模块需要。

# www.openssl.org/source/ wget -c www.openssl.org/source/openssl-1.1.1n.tar.gz tar -zxf openssl-1.1.1n.tar.gz && cd openssl-1.1.1n ./config --prefix=/usr/local/openssl make && sudo make install # lib 库加载到系统 echo "/usr/local/openssl/lib" >> /etc/ld.so.conf.d/libc.conf ldconfig # 可以看到当下系统的Openssl版本已经更新到最新 # root@weiyigeek-top:/usr/local/openssl/bin# openssl version # OpenSSL 1.1.1n 15 Mar 2022

步骤 02.从 nginx.org 下载稳定版和主线版本的源代码文件,要下载并解压最新主线版本的源代码,请运行:

# nginx.org sudo mkdir -vp /usr/local/nginx/module /usr/lib/nginx/modules /var/cache/nginx/{client_temp,proxy_temp,fastcgi_temp,uwsgi_temp,scgi_temp} wget nginx.org/download/nginx-1.21.6.tar.gz tar zxf nginx-1.21.6.tar.gz && cd nginx-1.21.6 $ ./configure \ --prefix=/usr/local/nginx \ --with-pcre=../pcre-8.45 \ --with-zlib=../zlib-1.2.11 \ --user=ubuntu --group=ubuntu \ --sbin-path=/usr/sbin/nginx \ --conf-path=/usr/local/nginx/nginx.conf \ --pid-path=/usr/local/nginx/nginx.pid \ --error-log-path=/var/log/nginx/error.log \ --github.com/weiyigeek/SecOpsDev/Application/Web/Nginx/nginxVirtualHost-v1.sh

#!/bin/bash #@Desc:Nginx多实例部署虚拟主机 #@Author:WeiyiGeek #@CreatTime:2020年3月8日 12点06分 #@Site:WeiyiGeek.top #@Test_Linux: Linux weiyigeek 3.10.0-693.el7.x86_64 #1 SMP Tue Aug 22 21:09:27 UTC 2017 x86_64 x86_64 x86_64 GNU/Linux #@release:CentOS Linux release 7.4.1708 (Core) ## Define nginx variable NGX_VER=1.16.1 NGX_URI="nginx.org/download/nginx-${NGX_VER}.tar.gz" NGX_SRC="nginx-${NGX_VER}.tar.gz" NGX_NAME=${NGX_SRC%.tar.gz} NGX_DIR="/usr/local/nginx/${NGX_VER}" NGX_ARGS="--prefix=${NGX_DIR} --user=nginx --group=nginx --with-tomcat:8080/index } # 第二个必选规则是处理静态文件请求,这是nginx作为tomcat:8080/ }
Nginx 之 规则判断表达式浅析

Nginx 常用判断表达式如下:

  • -f和!-f: 用来判断是否存在文件
  • -d和!-d:用来判断是否存在目录
  • -e和!-e:用来判断是否存在文件或目录
  • -x和!-x:用来判断文件是否可执行
  • 除此之外我们还可以使用上一小节的正则匹配符进行判断。

nginx 全局变量一览:

arg_PARAMETER # 这个变量包含GET请求中,如果有变量PARAMETER时的值。 args # 这个变量等于请求行中(GET请求)的参数,如:foo=123&bar=blahblah; binary_remote_addr # 二进制的客户地址。 body_bytes_sent # 响应时送出的body字节数数量。即使连接中断,这个数据也是精确的。 content_length # 请求头中的Content-length字段。 content_type # 请求头中的Content-Type字段。 cookie_COOKIE # cookie COOKIE变量的值 document_root # 当前请求在root指令中指定的值。 document_uri # 与uri相同。 host # 请求主机头字段,否则为服务器名称。 hostname # 设置为gethostname返回的机器主机名 weiyigeek.top:8080/test1/test2/test.php.

$host:weiyigeek.top $server_port:8080 $request_uri:weiyigeek.top:8080/test1/test2/test.php $document_uri:/test1/test2/test.php $document_root:/data/nginx/html $request_filename:/data/html/test1/test2/test.php

简单示例:

  • 1.判断请求的静态资源文件是否是存在的,如不存在则返回403.

location ~* \.(js|css|jpg|jpeg|gif|png|swf)$ { if (-f $request_filename) { return 403; break; } }

  • 2.判断Nginx全局变量并进行跳转到指定页面。

if ( $host !~* weiyigeek\.top ) { return 301 space.bilibili.com/385802642; }

  • 3.文件反盗链并设置过期时间

location ~*^.+\.(jpg|jpeg|gif|png|swf|rar|zip|css|js)$ { valid_referers none blocked *.weiyigeek.top localhost 127.0.0.1; if ($invalid_referer) { rewrite ^/ weiyigeek.top/wechat.html; return 412; break; } root /usr/local/nginx/html access_log off; expires 3d; break; }

  • 4.自定义变量判断跳转到指定页面.

# 仅允许222.222.222.222或者内网的两个IP访问,其他IP都rewrite到停服页面 if ( $remote_addr = 222.222.222.222){set $my_ip 1;} if ( $remote_addr = 192.168.1.170 ){ set $my_ip 1;} if ( $remote_addr = 192.168.1.169 ){ set $my_ip 1;} if ( $my_ip != 1) {rewrite ^/design/(.*)\.php$ /weiyigeek.html?$1&;} #将*.php转到tingfu.html

温馨提示: 此处以Nginx暴露给互联网, 所以利用 $remote_addr 变量获取访问者地址, 如果用了负载均衡的话此处应该是$$host$request_uri; } # www.weiyigeek.top$request_uri; }

ReWrite 重写语法示例
rewrite 正则表达式以及其可用参数:

  • last : 基本上都用这个Flag。
  • break : 中止 Rewirte 不在继续匹配
  • redirect : 返回临时重定向的HTTP状态302
  • permanent : 返回永久重定向的HTTP状态301

# www.weiyigeek.top$1 permanent; } } # 利用重写规则防止盗链 location ~* \.(gif|jpg|png|svg|css|js)$ { valid_referers none blocked *.weiyigeek.top localhost 127.0.0.1 server_names ~\.google\. ~\.baidu\.; if ($invalid_referer) { rewrite ^/ www.weiyigeek.top/403.jpg; } } # 利用重写功能可将网页中旧的访问目录重写到新的访问路径 # 例如, 如果访问blogwww.weiyigeek.top/2020/10/515.html 则将显示首页。 if ( $document_uri ~* /([0-9]+)/([0-9]+)/([0-9]+)\.html$) { rewrite ^/ /index.html last; }

温馨提示:301 与 302 状态码的不同区别。

  • 301 redirect: 301 代表永久性转移( Permanently Moved ) - 网站SEO推荐。
  • 302 redirect: 302 代表暂时性转移( Temporarily Moved )

Nginx 之 SSL 证书安全配置浅析

描述: 通常为了保证网站数据在传输过程中不被窃取和篡改,我们需要为其配置SSL证书,而在Nginx中配置方法是非常的简单的,不过最重要的还是你要生成私钥以及证书申请文件csr向证书颁发机构生成网站证书。

# Permanent Redirect for HTTP to HTTPS server { listen 80; listen [::]:80; server_name weiyigeek.top; return 301 $host$request_uri; } server { listen 443 ssl ssl-config.mozilla.org/ffdhe2048.txt > /path/to/dhparam ssl_dhparam /path/to/dhparam; # 兼容性较为通用的SSL协议与加密算法套件 ssl_protocols TLSv1 TLSv1.1 TLSv1.2 TLSv1.3; ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE:ECDH:AES:HIGH:EECDH+CHACHA20:EECDH+CHACHA20-draft:EECDH+AES128:RSA+AES128:EECDH+AES256:RSA+AES256:EECDH+3DES:RSA+3DES:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:!NULL:!aNULL:!eNULL:!EXPORT:!PSK:!ADH:!DH:!DES:!MD5:!RC4; # 安全配置: ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4:!DH:!DHE; # 证书常规握手加密算法方式共十八个,ECDHE、DHE、AES开头分别6个 ; ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA256:ECDHE-RSA-AES256-SHA:ECDHE-RSA-AES128-SHA:DHE-RSA-AES256-SHA256:DHE-RSA-AES128-SHA256:DHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA:AES256-GCM-SHA384:AES128-GCM-SHA256:AES256-SHA256:AES128-SHA256:AES256-SHA:AES128-SHA:HIGH:!NULL:!aNULL:!eNULL:!EXPORT:!PSK:!ADH:!DES:!MD5:!RC4; # 为了兼容性推荐服务器自动选择要使用的算法套件 ssl_prefer_server_ciphers on; # replace with the IP address of your resolver resolver 223.6.6.6 8.8.8.8 192.168.12.254; }

补充说明: 为Nginx服务器配置RSA与ECDSA双证书的两种方式。

# 1.首先是将两个证书链都加入 Nginx 的配置文件 ssl_certificate example.com.rsa.crt; ssl_certificate_key example.com.rsa.key; ssl_certificate example.com.ecdsa.crt; ssl_certificate_key example.com.ecdsa.key; # 2.或者使用 CT 的话有两种方法,一个是将两个证书的 CT 信息放到同一目录,并做如下设置,Nginx CT 模块会自动在这个目录下查找相应证书的 CT 信息并发送验证: ssl_ct on; ssl_ct_static_scts /path/to/sct/dir; # 我们也可以单独配置每个证书的 CT 文件 ssl_ct on; ssl_certificate example.com.rsa.crt; ssl_certificate_key example.com.rsa.key; ssl_ct_static_scts xample.com.rsa.scts; ssl_certificate example.com.ecdsa.crt; ssl_certificate_key example.com.ecdsa.key; ssl_ct_static_scts example.com.ecdsa.scts;
Nginx 之 资源压缩配置浅析

描述: 为了降低服务器带宽压力以及优化响应速度, 通常我们需要在Nginx服务器配置中为其开启gzip压缩,

配置示例:

# 开启gzip gzip on; # 启用gzip压缩的最小文件,小于设置值的文件将不会压缩 gzip_min_length 2k; # gzip 压缩级别,1-10,数字越大压缩的越好,也越占用CPU时间,后面会有详细说明 gzip_comp_level 2; # 进行压缩的文件类型,javascript有多种形,其中的值可以在 mime.types 文件中找到。 gzip_types text/plain application/javascript application/x-javascript text/css application/xml text/javascript application/x-blog.weiyigeek.top/img/avatar.jpg URL:

HTTP/1.1 304 Not Modified Server: nginx Date: Fri, 01 Apr 2022 09:19:09 GMT Last-Modified: Wed, 30 Mar 2022 15:42:30 GMT Connection: keep-alive ETag: "62447a66-35db" Expires: Fri, 08 Apr 2022 09:19:09 GMT # 表示资源过期时间,由当前访问时间加上max-age指令值所得 Cache-Control: max-age=604800 # 使用max-age指令指定组件被缓存多久,负数表示no-cache,正数或零表示max-age=time Access-Control-Allow-Origin: *.weiyigeek.top Access-Control-Allow-Methods: GET,POST Access-Control-Allow-Headers: DNT,X-Mx-ReqToken,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Authorization

实践示例:

# 网页资源缓存 location ~* \.(xml|html|htm)$ { # 资源决绝对目录设置 root /var/www/html; # 日志文件的相对路径或完整路径 access_log /path/to/file.log; # 开启日志记录 access_log on; # 设置过期时间 expires 24h; } # 样式、JS、图片资源缓存 location ~* \.(css|js|ico|gif|jpg|jpeg|png)$ { root /var/www/html/res; # 禁用404错误日志 log_not_found off; # 关闭日志 access_log off; # 缓存时间7天 expires 7d; } # 字体资源缓存 location ~* \.(eot|ttf|otf|woff|woff2|svg)$ { root /var/www/html/static; log_not_found off; access_log off; expires max; }
Nginx 之 反向代理资源基本缓存配置

描述: 在 Nginx 中往往我们会对指定站点进行反代(反向代理), 而在反代站点中存在动态资源与静态资源,我们可以使用下述指令开启简单的缓存配置。

首先我们需要了解一下三种缓存类型:

  • 客户端缓存
  • 代理缓存(Proxy Cache)
  • 服务端缓存

这里主要讲解Nginx作为代理服务器进行代理缓存的配置采用的参数以及示例:

  • 1.proxy_cache:定义用于缓存的共享内存区域。同一个区域可以用于多个地方

Syntax: proxy_cache zone | off; Default: proxy_cache off; Context: 127.0.0.1:9090; proxy_cache_key $request_uri; proxy_cache cache_$disk; }

实践示例:

  • 示例1.

proxy_cache_path /path/to/cache levels=1:2 keys_zone=mycache:10m max_size=10g inactive=60m use_temp_path=off; upstream my_upstream { server 192.168.1.20:8080 weight=5 max_fails=5 fail_timeout=30s; server 192.168.1.10:8080 weight=5 max_fails=5 fail_timeout=30s; } server { location / { proxy_cache mycache; proxy_pass my_upstream; } }

  • 示例2:

weiyigeek; proxy_cache_valid 200 304 12h; proxy_cache_valid any 10m; proxy_cache_key $host$uri$is_args$args; proxy_cache_purge $purge_method; add_header Nginx-Cache "$upstream_cache_status"; proxy_net_upstream error timeout invalid_header blog.weiyigeek.top/2019/9-1-124.html

文章书写不易,如果您觉得这篇文章还不错的,请给这篇专栏 (人间五大情),这将对我的肯定,谢谢!。

本文章来源 我的Blog站点 或 WeiyiGeek 公众账号 以及 我的BiliBili专栏 (技术交流、友链交换请邮我哟),谢谢支持!(๑′ᴗ‵๑) ❤
欢迎各位志同道合的朋友一起学习交流,如文章有误请留下您宝贵的知识建议,通过邮箱联系我哟!

初学者如何学习Nginx代理?查阅这篇Nginx进阶配置实战指南即可!