初学者如何学习Nginx代理?查阅这篇Nginx进阶配置实战指南即可!
- 内容介绍
- 文章标签
- 相关推荐
本文共计3156个文字,预计阅读时间需要13分钟。
基础学习与实战指南
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
描述:在企业线上生产环境中推荐进行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状态302permanent: 返回永久重定向的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专栏 (
技术交流、友链交换请邮我哟),谢谢支持!(๑′ᴗ‵๑) ❤
欢迎各位志同道合的朋友一起学习交流,如文章有误请留下您宝贵的知识建议,通过邮箱联系我哟!
本文共计3156个文字,预计阅读时间需要13分钟。
基础学习与实战指南
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
描述:在企业线上生产环境中推荐进行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状态302permanent: 返回永久重定向的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专栏 (
技术交流、友链交换请邮我哟),谢谢支持!(๑′ᴗ‵๑) ❤
欢迎各位志同道合的朋友一起学习交流,如文章有误请留下您宝贵的知识建议,通过邮箱联系我哟!

