Nginx静态资源站点

Nginx虚拟主机

虚拟主机指的就是一个独立的站点,具有独立的域名,有完整的www服务,例如网站、FTP、邮件等。
Nginx支持多虚拟主机,在一台机器上可以运行完全独立的多个站点。
nginx的多虚拟主机,可以基于

  • 多域名的形式
  • 多IP的形式
  • 多端口的形式

image.png
一些草根流量站长,常会搭建个人站点进行资源分享交流,并且可能有多个不同业务的站点,如果每台服务器只运行一个网站,那么将造成资源浪费,成本浪费。
利用虚拟主机的功能,就不用为了运行一个网站而单独配置一个Nginx服务器,或是单独再运行一组Nginx进程。
虚拟主机可以在一台服务器,同一个Nginx进程上运行多个网站。
nginx.conf主配置文件中,最简单的一段虚拟主机配置如下

  1. http{
  2. # 在平级关系内,编写第二个、第三个,server{}就是代表配置多个虚拟主机
  3. # 一个server{}标签就可以理解为是一个网站
  4. # 从上往下加载
  5. server {
  6. #监听端口 定义虚拟主机端口号,也是用户访问网站的入口
  7. listen 80;
  8. #填写域名匹配 没有域名,就是localhost
  9. server_name localhost;
  10. #访问日志
  11. access_log logs/host.access.log main;
  12. #url匹配 如下的规则是最低级的规则,任何nginx的请求,都会进入如下的localhost配hi,去它所定义的目录中寻找资料。
  13. location / {
  14. # root是关键词,是定义网页的根目录,这个html是以nginx安装的路径为相对
  15. root html;
  16. # index关键词,定义nginx首页文件名字,默认找哪个文件
  17. index index.html index.htm;
  18. }
  19. }
  20. }

搭建一个静态资源网站

修改nginx.conf,自上而下找到第一个server{}指令块,修改如下

  1. 准备好资源文件目录,内容自定义
  2. [root@chaogelinux website]# pwd
  3. /website
  4. [root@chaogelinux website]# ls
  5. index.html pic
  6. 1.修改nginx.conf
  7. server {
  8. listen 80;
  9. server_name localhost;
  10. #默认编码
  11. charset utf-8;
  12. access_log logs/host.access.log main;
  13. location / {
  14. #定义虚拟主机的资源目录,
  15. root /website/;
  16. #定义首页文件的名字
  17. index index.html index.htm;
  18. }
  19. }
  20. 2.重载nginx配置文件
  21. nginx -s reload

访问网站首页

  1. http://123.206.16.61:80/index.html
  2. 简写
  3. http://123.206.16.61/

image.png
访问网站图片资源

  1. http://123.206.16.61/pic/2.jpg

image.png
访问gif动图

  1. http://123.206.16.61/pic/1.gif

image.png
访问文本
http://123.206.16.61/learn_linux.txt
image.png

静态资源压缩

nginx支持gzip对资源压缩传输,经过gzip压缩后的页面大小可以为原本的30%甚至更小,用户浏览体验会快很多。

  1. 准备好nginx静态资源
  2. [root@bogon html]# ll -h
  3. total 1.2M
  4. -rw-r--r--. 1 root root 537 Feb 11 18:35 50x.html
  5. -rw-r--r--. 1 root root 1.2M Feb 11 19:06 apple.txt
  6. -rw-r--r--. 1 root root 612 Feb 11 18:35 index.html

开启gzip前,静态资源加载如下
image.png

  1. nginx.conf开启gzip压缩功能,添加如下语句,针对静态资源压缩
  2. gzip on;
  3. gzip_http_version 1.1;
  4. # 等级越低,压缩效率越高,越消耗CPU
  5. gzip_comp_level 4;
  6. gzip_types text/plain application/javascript application/x-javascript text/css application/xml text/javascript application/x-httpd-php image/jpeg image/gif image/png;
  7. #重载nginx
  8. nginx -s reload

image.png
开启了gzip压缩后,整体的传输资源大小,以及相应速度,都大幅度提高了

基于IP多虚拟主机

Linux操作系统都能够支持给网卡绑定多个IP地址,可以使得一块网卡上运行多个基于IP的虚拟主机。
环境准备

  1. 添加ip别名
  2. [root@bogon ~]# ifconfig ens33:1 192.168.178.200 broadcast 192.168.178.255 netmask 255.255.255.0 up
  3. #此时机器有2个ip,确保都可以通信即可
  4. [root@bogon ~]# ifconfig |grep 192
  5. inet 192.168.178.181 netmask 255.255.255.0 broadcast 192.168.178.255
  6. inet 192.168.178.200 netmask 255.255.255.0 broadcast 192.168.178.255
  7. [root@bogon ~]# curl 192.168.178.200
  8. [root@bogon ~]# curl 192.168.178.181
  9. 修改nginx.conf文件,在http{}标签中添加最后一行,添加如下参数
  10. include extra/*.conf;

修改nginx.conf支持多虚拟主机

  1. #第一个虚拟主机
  2. server {
  3. #监听的端口和ip
  4. listen 192.168.178.181:80;
  5. #主机域名
  6. server_name 192.168.178.181;
  7. charset utf-8;
  8. access_log logs/host.access.log;
  9. #url匹配
  10. location / {
  11. #HTML文件存放的目录
  12. root /website/s1;
  13. #默认首页文件,从左往右寻找,index.html或是index.htm文件
  14. index index.html index.htm;
  15. }
  16. }
  17. #第二个ip虚拟主机
  18. #第二个虚拟主机
  19. server {
  20. listen 192.168.178.200:80;
  21. server_name 192.168.178.200;
  22. location / {
  23. index index.html index.htm;
  24. root /website/s2;
  25. }
  26. }

分别准备好网站资源

  1. [root@bogon nginx]# echo "我是来自于192.168.178.181的站点 s1.html" > /website/s1/index.html
  2. [root@bogon nginx]# echo "我是来自于192.168.178.200的站点 s2.html" > /website/s2/index.html

测试访问页面,基于不同ip的虚拟主机
image.png
image.png

基于域名的多虚拟主机

基于多IP的虚拟主机可能会造成IP地址不足的问题,如果没有特殊需求,更常用的是基于多域名的形式。
只需要你单独配置DNS服务器,将主机名对应到正确的IP地址,修改Nginx配置,可以识别到不同的主机即可,这样就可以使得多个虚拟主机用同一个IP,解决了IP不足的隐患。

  1. 1.在本地hosts文件中,添加对应的解析记录,由于测试使用
  2. [root@bogon ~]# cat /etc/hosts|grep 127.0.0.1
  3. 127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
  4. 127.0.0.1 www.chaogenginx.com
  5. 127.0.0.1 www.chaogelinux.com

修改nginx.conf支持多域名的虚拟主机

  1. 1.第一个server{}指令块的配置
  2. server {
  3. #监听的端口和ip
  4. listen 80;
  5. #主机域名
  6. server_name www.chaogelinux.com;
  7. charset utf-8;
  8. access_log logs/host.access.log;
  9. #url匹配
  10. location / {
  11. #HTML文件存放的目录
  12. root /website/s1;
  13. #默认首页文件,从左往右寻找,index.html或是index.htm文件
  14. index index.html index.htm;
  15. }
  16. }
  17. 2.第二个server{}的配置
  18. #第二个虚拟主机
  19. server {
  20. listen 80;
  21. server_name www.chaogenginx.com;
  22. location / {
  23. index index.html index.htm;
  24. root /website/s2;
  25. }
  26. }
  27. 3.生成2个站点的首页
  28. echo "我是多域名虚拟主机,来自于域名www.chaogelinux.com" > /website/s1/index.html
  29. echo "我是来自于域名www.chaogenginx.com的多域名虚拟主机" > /website/s2/index.html

测试访问多域名

  1. [root@bogon ~]# curl www.chaogelinux.com
  2. 我是多域名虚拟主机,来自于域名www.chaogelinux.com
  3. [root@bogon ~]#
  4. [root@bogon ~]# curl www.chaogenginx.com
  5. 我是来自于域名www.chaogenginx.com的多域名虚拟主机
  6. [root@bogon ~]#
  7. [root@bogon ~]#
  8. [root@bogon ~]# curl 127.0.0.1 #默认server{}匹配顺序,自上而下
  9. 我是多域名虚拟主机,来自于域名www.chaogelinux.com

基于端口的多虚拟主机

基于端口的配置在生产环境比较少见,用于特殊场景,例如公司内部测试平台网站,使用特殊端口的后台,OA系统、网站后台,CRM后台等。
案例:运行基于80、81端口的虚拟主机运行

  1. 1.第一个虚拟主机
  2. server {
  3. #监听的端口和ip
  4. listen 80;
  5. #主机域名
  6. server_name www.chaogelinux.com;
  7. access_log logs/www.chaogelinux.log;
  8. charset utf-8;
  9. #url匹配
  10. location / {
  11. #HTML文件存放的目录
  12. root /website/s1/;
  13. #默认首页文件,从左往右寻找,index.html或是index.htm文件
  14. index index.html index.htm;
  15. #autoindex off;
  16. }
  17. }
  18. 2.#第二个虚拟主机
  19. server {
  20. listen 81;
  21. server_name www.chaogenginx.com;
  22. access_log logs/www.chaogenginx.com;
  23. charset utf-8;
  24. location / {
  25. index index.html index.htm;
  26. root /website/s2;
  27. #autoindex on;
  28. }
  29. }
  30. 3.nginx -s reload
  31. 4.访问8081端口
  32. [root@bogon nginx]# curl 127.0.0.1:81
  33. 我是来自于域名www.chaogenginx.com的多域名虚拟主机
  34. [root@bogon nginx]# curl 127.0.0.1:80
  35. 我是多域名虚拟主机,来自于域名www.chaogelinux.com
  36. <img src="./1.jpg">
  37. <img src="./2.jpg">
  38. <img src="./3.jpg">
  39. <head>
  40. <link rel="shortcut icon" href="#"/>
  41. </head>

Nginx访客日志功能

日志对于程序员很重要,可用于问题排错,记录程序运行状态,一个好的日志能够给与精确的问题定位。
Nginx日志功能需要在nginx.conf中打开相关指令log_format,设置日志格式,以及设置日志的存储位置access_log,指定日志的格式,路径,缓存大小。

  1. nginx.conf中有关访客日志定义如下
  2. #a
  3. log_format main '$remote_addr - $remote_user [$time_local] "$request" '
  4. '$status $body_bytes_sent "$http_referer" '
  5. '"$http_user_agent" "$http_x_forwarded_for"';
  6. access_log logs/access.log main;
  7. 参数解释
  8. $remote_addr :记录访问网站的客户端地址
  9. $remote_user :记录远程客户端用户名称
  10. $time_local :记录访问时间与时区
  11. $request :记录用户的 http 请求起始行信息
  12. $status :记录 http 状态码,即请求返回的状态,例如 200 404 502
  13. $body_bytes_sent :记录服务器发送给客户端的响应 body 字节数
  14. $http_referer :记录此次请求是从哪个链接访问过来的,可以根据 referer 进行防盗链设置
  15. $http_user_agent :记录客户端访问信息,如浏览器、手机客户端等
  16. $http_x_forwarded_for :当前端有代理服务器时,设置 Web 节点记录客户端地址的配置,此参数生效的前提是代理服务器上也进行了相关的 x_forwarded_for 设置

查看日志格式

  1. tail -2 logs/access.log
  2. 192.168.178.1 - - [11/Feb/2020:19:24:37 +0800] "GET / HTTP/1.1" 304 0 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.130 Safari/537.36"
  3. 127.0.0.1 - - [12/Feb/2020:10:26:26 +0800] "GET / HTTP/1.1" 200 65 "-" "curl/7.29.0"

多虚拟主机定义日志

由于Nginx支持多虚拟主机,日志功能也是可以区分开的,用access_log定义存储位置。
日志指令语法

  1. access_log path [format buffer=size | off]
  2. path代表日志存放路径

【关闭日志】

  1. access_log off;

【多虚拟主机的访客日志】

  1. 1.虚拟主机1
  2. server {
  3. #监听的端口和ip
  4. listen 80;
  5. #主机域名
  6. server_name www.chaogelinux.com;
  7. access_log logs/www.chaogelinux.log;
  8. charset utf-8;
  9. #url匹配
  10. location / {
  11. #HTML文件存放的目录
  12. root /website/s1;
  13. #默认首页文件,从左往右寻找,index.html或是index.htm文件
  14. index index.html index.htm;
  15. }
  16. }
  17. 2.虚拟主机2
  18. server {
  19. listen 80;
  20. server_name www.chaogenginx.com;
  21. access_log logs/www.chaogenginx.com;
  22. location / {
  23. index index.html index.htm;
  24. root /website/s2;
  25. }
  26. }
  27. 3.重载nginx
  28. nginx -s reload
  29. 4.分别发送请求,检测日志动态
  30. [root@bogon logs]# pwd
  31. /opt/nginx/logs
  32. [root@bogon logs]# ls
  33. error.log nginx.pid www.chaogelinux.log www.chaogenginx.com
  34. [root@bogon ~]# curl www.chaogenginx.com
  35. 我是来自于域名www.chaogenginx.com的多域名虚拟主机
  36. [root@bogon ~]# curl www.chaogelinux.com
  37. 我是多域名虚拟主机,来自于域名www.chaogelinux.com

Nginx目录浏览功能

例如将你电脑的资料共享出来,方便快速访问
image.png

  1. server {
  2. #监听的端口和ip
  3. listen 80;
  4. #主机域名
  5. server_name www.chaogelinux.com;
  6. access_log logs/www.chaogelinux.log;
  7. #目录有中文的时候,这里必须改
  8. charset utf-8;
  9. #url匹配
  10. location / {
  11. #需要列出目录索引的位置
  12. root /;
  13. #开启目录索引功能
  14. autoindex on;
  15. }

Nginx的浏览器缓存

配置浏览器缓存可以加速静态资源的访问,浏览器对用户访问的资源进行存储,下次访问,不用再去向服务器寻求资料,直接本地显示,加速访问体验,节省网络资源,提高效率。
Nginx通过expires指令配置缓存,可以控制HTTP响应中的Expires和Cache-Control的头部信息,用来控制页面缓存
例如HTML页面经常引用JavaScript以及图片等文件,这些文件很少被修改,可以设置浏览器对该类资源在本地缓存定期的时间。
添加缓存之前响应信息
image.png
添加缓存配置之后
nginx.conf修改server{}语句块

  1. location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$ {
  2. root /website/s1/;
  3. expires 30d;
  4. }
  5. location ~ .*\.(js|css)?$ {
  6. root /website/s1/;
  7. expires 1h;
  8. }

image.png
image.png

规范Nginx.conf

对于Nginx的使用,需要反复修改Nginx.conf,修改次数多了之后,就难以观看了,Nginx提供了include指令,可以将其他目录的配置文件,导入进主配置文件nginx.conf中。
思路可以根据虚拟主机域名或是功能别名,创建配置文件,例如

  • bbs.conf
  • crm.conf
  • blog.conf

然后使用include指令

  1. include mime.types;
  2. include fastcgi_params;
  3. include vhosts/*.conf;

Nginx优化配置文件案例
nginx.conf主配置文件,修改为如下简略信息

  1. 1.创建统一管理配置文件目录
  2. mkdir -p /opt/nginx/conf/extra
  3. 2.读取nginx.conf配置文件,将第一个server{}虚拟主机配置导出为bbs.conf
  4. [root@bogon conf]# sed -n '29,87p' nginx.conf > extra/bbs.conf
  5. 3.删除原有的配置
  6. [root@bogon conf]# sed -i '29,87d' nginx.conf
  7. 4.生成第二个blog.conf,导出第二个虚拟主机的配置
  8. [root@bogon conf]# sed -n '29,41p' nginx.conf > extra/blog.conf
  9. [root@bogon conf]# sed -i '29,41d' nginx.conf #删除主配置文件的参数
  10. 5.主配置文件,添加include配置
  11. http {
  12. include mime.types;
  13. # 定义日志的内容格式(记录内容的详细程度)
  14. default_type application/octet-stream;
  15. log_format main '$remote_addr - $remote_user [$time_local] "$request" '
  16. '$status $body_bytes_sent "$http_referer" '
  17. '"$http_user_agent" "$http_x_forwarded_for"';
  18. sendfile on;
  19. tcp_nopush on;
  20. include extra/*.conf;
  21. }
  22. '$remote_addr' 记录访客的客户端IP地址
  23. '$remote_user' 记录远程客户端的访客用户名
  24. [$time_local] 记录访客的时间和地区信息
  25. '$request' 记录用户的http请求的首行信息
  26. '$status' 记录用户的http请求状态
  27. '$body_bytes_sent' 记录服务器发给客户端的相应数据字节大小
  28. '$http_referer' 本次请求是从哪个连接过来的
  29. '$http_user_agent' 记录客户端的访问信息,如浏览器喜喜,手机浏览器信息
  30. '$http_x_forwarded_for' 捉到藏在代理IP后边的真实客户端IP信息
  31. 6.此时nginx的两个虚拟主机任然可以用
  32. [root@bogon conf]# curl 127.0.0.1
  33. 我是多域名虚拟主机,来自于域名www.chaogelinux.com
  34. <img src="./1.jpg">
  35. <img src="./2.jpg">
  36. <img src="./3.jpg">
  37. <head>
  38. <link rel="shortcut icon" href="#"/>
  39. </head>
  40. [root@bogon conf]# curl 127.0.0.1:81
  41. 我是来自于域名www.chaogenginx.com的多域名虚拟主机
  42. 实现了配置文件拆分,方便可观

Nginx状态信息功能

Nginx状态信息(status)配置及信息详解 nginx与php-fpm一样内建了一个状态页,对于想了解nginx的状态以及监控nginx非常有帮助。为了后续的zabbix监控,我们需要先了解一下nginx的状态页。
Nginx状态信息(status)介绍 Nginx软件在编译时又一个with-http_stub_status_module模块,这个模块功能是记录Nginx的基本访问状态信息,让使用者了解Nginx的工作状态。 要想使用状态模块,在编译时必须增加—with-http_stub_status_module参数。

  1. 检查Nginx是否开启此功能
  2. [root@bogon conf]# nginx -V
  3. nginx version: nginx/1.14.0
  4. built by gcc 4.8.5 20150623 (Red Hat 4.8.5-39) (GCC)
  5. built with OpenSSL 1.0.2k-fips 26 Jan 2017
  6. TLS SNI support enabled
  7. configure arguments: --prefix=/opt/nginx/ --with-http_ssl_module --with-http_flv_module --with-http_gzip_static_module --with-http_stub_status_module --with-threads --with-file-aio

有的,那么修改nginx.conf,支持此功能

  1. [root@bogon extra]# cat status.conf
  2. server {
  3. listen 85;
  4. location / {
  5. stub_status on;
  6. access_log off;
  7. }
  8. }
  9. nginx -s reload

使用ab命令,进行nginx压力测试

  1. yum -y install httpd-tools
  2. ab -kc 1000 -n 100000 http://127.0.0.1/ #开启会话保持,1000个并发,发送十万个请求
  3. -n requests #执行的请求数,即一共发起多少请求。
  4. -c concurrency #请求并发数。
  5. -k #启用HTTP KeepAlive功能,即在一个HTTP会话中执行多个请求。

image.png

Nginx错误日志

Nginx能够将自身运行故障的信息也写入到指定的日志文件中。对于错误信息的调试,是维护Nginx的重要手段,指令是error_log,可以放在http{}全局中,也可以单独为虚拟主机记录。

  1. 语法:
  2. error_log file level;
  3. 日志级别在乎debug|info|notice|warn|error|crit|alert|emerg
  4. 级别越高,日志记录越少,生产常用模式是warn|error|crit级别
  5. 日志的记录,会给服务器增加额外大量的IO消耗,按需修改

nginx.conf修改如下,针对虚拟主机添加错误日志

  1. #修改配置文件
  2. [root@bogon extra]# cat blog.conf
  3. #第二个虚拟主机
  4. server {
  5. listen 81;
  6. server_name www.chaogenginx.com;
  7. access_log logs/www.chaogenginx.com;
  8. charset utf-8;
  9. error_log logs/blog.error.log; #添加本行即可
  10. location / {
  11. index index.html index.htm;
  12. root /website/s2;
  13. }
  14. }
  15. #检查日志
  16. [root@bogon extra]# nginx -s reload
  17. [root@bogon extra]#
  18. [root@bogon extra]#
  19. [root@bogon extra]# ls ../../logs/
  20. access.log blog.error.log error.log nginx.pid www.chaogelinux.log www.chaogenginx.com

Nginx location作用

Nginx的locaiton作用是根据用户请求的URI不同,来执行不同的应用。
针对用户请求的网站URL进行匹配,匹配成功后进行对应的操作。

  1. nginx.confserver{}指令块的location指令如下
  2. location / {
  3. root html;
  4. index index.html index.htm;
  5. }
  6. location = /50x.html {
  7. root html;
  8. }

语法

  1. location [ = | ~| ~* | ^~ ] url {
  2. #指定对应的动作
  3. }
  4. #正则表达式解释
  5. 匹配符 匹配规则 优先级
  6. = 精确匹配 1
  7. ^~ 以某个字符串开头,不做正则 2
  8. ~* 正则匹配 3
  9. /blog/ 匹配常规字符串,有正则就优先正则 4
  10. / 通用匹配,不符合其他location的默认匹配 5

实际演练

请求url 完整url 匹配后动作
/ http://192.168.178.134/ 配置A
/index.html http://192.168.178.134/index.html 配置B
/blog/blog.html http://192.168.178.134/blog/blog.html 配置C
/img/1.jpg http://192.168.178.134/1.jpg 配置D
/blog/1.jpg http://192.168.178.134/blog/1.jpg 配置E

修改nginx.conf如下

  1. [root@bogon extra]# cat www.conf
  2. server {
  3. listen 83;
  4. server_name _;
  5. #最低级匹配,不符合其他locaiton就来这
  6. location / {
  7. return 401;
  8. }
  9. #优先级最高,精确匹配
  10. location = / {
  11. return 402;
  12. }
  13. #以/blog/开头的url,来这里,如符合其他locaiton,则以其他优先
  14. location /blog/ {
  15. return 403;
  16. }
  17. #匹配任何以/img/开头的请求,不匹配正则
  18. location ^~ /img/ {
  19. return 404;
  20. }
  21. #匹配任何以.gif结尾的请求,支持正则
  22. location ~* \.(gif|jpg|jpeg)$ {
  23. return 500;
  24. }
  25. }
  1. curl命令
  2. -s 不输出错误和进度信息,静默输出
  3. -o 输出写入到指定文件中 /dev/null 就是丢弃输出,扔进黑洞
  4. -I 只显示响应头
  5. -w 完成后输出哪些内容
  1. #用户请求的url为空或者有一个/
  2. [root@bogon extra]# curl -s -o /dev/null -I -w "%{http_code}\n" 127.0.0.1:83
  3. 402
  4. [root@bogon extra]# curl -s -o /dev/null -I -w "%{http_code}\n" 127.0.0.1:83/
  5. 402
  6. #用户请求存在index.html或者其他任意不符合其他location的字符串
  7. [root@bogon extra]# curl -s -o /dev/null -I -w "%{http_code}\n" 127.0.0.1:83/index.html
  8. 401
  9. #访问以/blog/开头的url
  10. [root@bogon extra]# curl -s -o /dev/null -I -w "%{http_code}\n" 127.0.0.1:83/blog/index.html
  11. 403
  12. #访问以/img/开头的url
  13. [root@bogon extra]# curl -s -o /dev/null -I -w "%{http_code}\n" 127.0.0.1:83/img/2.gif
  14. 404
  15. #匹配以gif结尾的url,由于/blog/优先级最低,因此匹配1.gif的规则
  16. [root@bogon extra]# curl -s -o /dev/null -I -w "%{http_code}\n" 127.0.0.1:83/blog/1.gif
  17. 500
  18. #由于/img/优先级更高,因此优先匹配
  19. [root@bogon extra]# curl -s -o /dev/null -I -w "%{http_code}\n" 127.0.0.1:83/img/1.gif
  20. 404

Nginx地址重写

Nginx rewrire技术主要是实现URL地址重写,且支持正则表达式的规则。
image.png
rewrite能够实现URL的跳转,需要nginx在编译安装的时候,装好了PCRE这个软件。
通过rewrite可以规范URL、根据变量进行URL跳转等,常用的功能如

  • 对于爬虫的封禁,让其跳转无用页面
  • 动态的URL伪装成HTMl页面,便于搜索引擎的抓取
  • 旧域名、旧目录的更新,需要跳转到新的URL地址

语法

  1. rewrite ^/(.*) http://192.168.178.134/$1 permanent;
  2. #解释
  3. rewrite是指令,开启一个跳转规则
  4. 正则是 ^/(.*) 表示匹配所有,匹配成功后跳转到后面的url地址
  5. $1 表示取出前面正则括号里的内容
  6. permanent表示 301 重定向的标记

【rewrite的结尾参数 flag标记】

标记 解释a
last 规则匹配完成后,继续向下匹配新的Locaiton
break 本条规则完成匹配后,立即停止
redirect 返回302临时重定向,浏览器地址栏显示跳转后的URL,爬虫不会更新url
permanent 返回301永久重定向,浏览器地址显示跳转后的URL

last和break用于实现URL重写,浏览器地址栏不发生变化
redirect和permanent用于实现URL跳转,浏览器地址栏跳转新的URL

实现301 URL跳转

  1. #请求直接跳转到百度
  2. [root@bogon extra]# cat learn_rewrite.conf
  3. server {
  4. listen 90;
  5. server_name _;
  6. rewrite ^/(.*) http://www.baidu.com/$1 permanent;
  7. }

Nginx访问认证

有时候,我们一些站点内容想要进行授权查看,只能输入账号密码之后才能访问,例如一些重要的内网平台,CRM,CMDB,企业内部WIKI等等。

  1. htpasswdApache密码生成工具,Nginx支持auth_basic认证,因此我门可以将生成的密码用于Nginx中,输入一行命令即可安装:yum -y install httpd-tools ,参数如下:
  2. -c 创建passwdfile.如果passwdfile 已经存在,那么它会重新写入并删去原有内容.
  3. -n 不更新passwordfile,直接显示密码
  4. -m 使用MD5加密(默认)
  5. -d 使用CRYPT加密(默认)
  6. -p 使用普通文本格式的密码
  7. -s 使用SHA加密
  8. -b 命令行中一并输入用户名和密码而不是根据提示输入密码,可以看见明文,不需要交互
  9. -D 删除指定的用户
  10. #接认证文件,htpasswd -bc .access username password
  11. #在当前目录生成.access文件,用户名username,密码:password,默认采用MD5加密方式。
  1. nginx的认证模块指令,语法:
  2. location / {
  3. auth_basic "string"; 可以填写off或是string
  4. auth_basic_user_file conf/htpasswd;
  5. }

实际操作案例

  1. [root@chaogelinux extra]# cat www.conf
  2. server {
  3. listen 80;
  4. server_name _;
  5. location / {
  6. root html/www;
  7. index index.html;
  8. auth_basic "learn nginx auth_module";
  9. #nginx会去这个文件中验证账号密码
  10. auth_basic_user_file /home/Learn_Nginx/nginx/conf/extra/htpasswd;
  11. }
  12. }
  13. [root@chaogelinux www]# cat index.html
  14. <meta charset=utf8>
  15. 只有正确输入了账号密码,才能看到此页面
  16. 重启nginx
  17. nginx -s reload
  1. 生成密码文件
  2. [root@chaogelinux extra]# htpasswd -bc ./htpasswd chaoge 666
  3. Adding password for user chaoge

访问测试
image.png

root和alias区别

image.png

PPT 两周准备时间

  1. 这周准备下周试讲

10号晚上或者11号上午 或者周末再来一次
20讲述 5分钟问答

  1. 总结成果
  2. 准备进行交接工作