返回顶部
首页 > 资讯 > 后端开发 > Python >3.Nginx配置进阶(三)
  • 165
分享到

3.Nginx配置进阶(三)

进阶Nginx 2023-01-31 04:01:13 165人浏览 泡泡鱼

Python 官方文档:入门教程 => 点击学习

摘要

nginx配置进阶(三)==============================================================================概述: 本章我们将会继续介绍Nginx中http段的配置,内

nginx配置进阶(三)

==============================================================================

概述:

 本章我们将会继续介绍Nginx中http段的配置,内容主要包括:

  • ngx_Http_fastcgi_module模块详解;

  • lnmp环境的部署;

  • 定义fastcgi的缓存

  • ngx_http_ssl_module模块:

  • 配置Nginx支持ssl的安全访问;

  • ngx_http_referer_module模块:防盗链功能

==============================================================================

ngx_http_fastcgi_module模块:构建lnmp

  1.The ngx_http_fastcgi_module module allows passing requests to a FastCGI server.

★作用:

  • 用于构建lnmp时,能够让nginx作为适配到fastcgi协议的客户端,从而能够连接至后端fpm的服务器,从而实现与fpm server进行通信

附图:

   lnmp

wKiom1gR-VqQ6eLnAABfeH_8F8s858.gif

★fastcgi_pass address;

  • address为fastcgi server的地址;

  • 适用位置:location, if in location;

示例:   

    fastcgi_pass localhost:9000;

★fastcgi_index name;

  • fastcgi默认的主页资源; 

★fastcgi_param parameter value [if_not_empty];

  • Sets a parameter that should be passed to the FastCGI server. The value can contain text, variables, and their combination.(传递给后端某一个服务器的变量的值,可以是字符串,也可以是变量,还可以是他们的组合)

[root@Centos7 nginx]# cat fastcgi_params 

fastcgi_param  QUERY_STRING       $query_string;
fastcgi_param  REQUEST_METHOD     $request_method;
fastcgi_param  CONTENT_TYPE       $content_type;
fastcgi_param  CONTENT_LENGTH     $content_length;

fastcgi_param  SCRIPT_NAME        $fastcgi_script_name;
fastcgi_param  REQUEST_URI        $request_uri;
fastcgi_param  DOCUMENT_URI       $document_uri;
fastcgi_param  DOCUMENT_ROOT      $document_root;
fastcgi_param  SERVER_PROTOCOL    $server_protocol;
fastcgi_param  REQUEST_SCHEME     $scheme;
fastcgi_param  https              $https if_not_empty;

fastcgi_param  GATEWAY_INTERFACE  CGI/1.1;
fastcgi_param  SERVER_SOFTWARE    nginx/$nginx_version;

fastcgi_param  REMOTE_ADDR        $remote_addr;
fastcgi_param  REMOTE_PORT        $remote_port;
fastcgi_param  SERVER_ADDR        $server_addr;
fastcgi_param  SERVER_PORT        $server_port;
fastcgi_param  SERVER_NAME        $server_name;

# PHP only, required if php was built with --enable-force-cgi-redirect
fastcgi_param  REDIRECT_STATUS    200;

配置lnmp示例1wKiom1gSEPbQ9mYhAAA6a2MQQFQ873.png


配置示例2:通过/pm_status和/ping来获取fpm server状态信息;

wKiom1gTPSHzsOu1AAAunoHb4-c790.png

部署lnmp环境:

   1.首先安装相关的部署程序包

   # yum install php-fpm php-Mysql mariadb-server php-gd php-mbstring php-mcrypt

 2.php-fpm默认系统用户和组为apache,因为这里要使nginx与php-fpm相结合,所以我们需要修改php-fpm的配置文件/etc/php-fpm.d/www.conf 修改用户和组为nginx

[root@localhost ~]# cd /etc/php-fpm.d/
[root@localhost php-fpm.d]# ls
 www.conf
[root@localhost php-fpm.d]# vim www.conf  # 修改配置文件
  user = nginx
  group = nginx
  
  pm.status_path = /pm-status # 启用状态页
  ping.path = /ping  # 启用ping和pong接口
  ping.response = pong

   3.创建/var/lib/php/session,并修改其属主和属组为nginx

[root@localhost ~]# mkdir /var/lib/php/session
[root@localhost ~]# chown -R nginx:nginx /var/lib/php/session
[root@localhost ~]# ll -d /var/lib/php/session
drwxr-xr-x 2 nginx nginx 4096 10月 27 21:56 /var/lib/php/session

  4.启动服务,并查看其对应端口,nginx/80,mairadb/3306,php-fpm/9000

[root@localhost ~]# systemctl start nginx
[root@localhost ~]# systemctl start php-fpm
[root@localhost ~]# systemctl start mariadb

[root@localhost ~]# ss -tnl
State       Recv-Q Send-Q                                      Local Address:Port                                                     Peer Address:Port              
LISTEN      0      128                                             127.0.0.1:9000                                                                *:*                  
LISTEN      0      50                                                      *:3306                                                                *:*                  
LISTEN      0      128                                                     *:80                                                                  *:*                  
LISTEN      0      128                                                     *:22                                                                  *:*                  
LISTEN      0      128                                             127.0.0.1:631                                                                 *:*                  
LISTEN      0      100                                             127.0.0.1:25                                                                  *:*                  
LISTEN      0      128                                             127.0.0.1:6010                                                                *:*                  
LISTEN      0      128                                                    :::22                                                                 :::*                  
LISTEN      0      128                                                   ::1:631                                                                :::*                  
LISTEN      0      100                                                   ::1:25                                                                 :::*                  
LISTEN      0      128                                                   ::1:6010                                                               :::*

  5.接下来我们就可以配置nginx使用php-fpm了,配置如下:

    1)/etc/nginx/conf.d/default.conf中自带有fastcgi的定义,我们直接启用就可以,然后稍作修改

wKiom1gSCynQgmnSAAAjeY8YBhg336.png

  2)修改如下:

 location ~* \.php$ {     # 上图匹配所有以.php结尾的文件区分大小写,这里改为不区分大小写
    root           /usr/share/nginx/html; # 默认为相对路径,这里最好改为绝对路径
    fastcgi_pass   127.0.0.1:9000;
    fastcgi_index  index.php; # 默认的主页面         
             
    # 请求时传递的脚本参数到后端,这里我们要给它一个真正的root路径下的url
    # 这里的url一定要转换成对应的后端服务器的网页文件的位置
    fastcgi_param  SCRIPT_FILENAME  /usr/share/nginx/html/$fastcgi_script_name;
    include        fastcgi_params; # 包含的另外一个配置文件 
 }

  3)修改完成之后,检测语法,并重载nginx服务,然后提供页面文件

[root@localhost conf.d]# nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
[root@localhost conf.d]# nginx -s reload

[root@localhost conf.d]# cat << eof > /usr/share/nginx/html/phpinfo.php # 提供测试页
> <?php
>        phpinfo();
> ?>
> eof

[root@localhost conf.d]# cat /usr/share/nginx/html/phpinfo.php 
<?php
       phpinfo();
?>

   用浏览器访问如下:

wKioL1gSECbDGA6wAAB6qHENZN4672.png

    6.接下来我们部署一个php的应用程序phpMyadmin,因为只是测试一下,所以我把之前部署在lamp上的phpMyadmin复制过来,如下:

[root@localhost ~]# ls /vhosts/www/
index.html  index.php  phpMyAdmin-4.0.5-all-languages  pma  test.html

[root@localhost ~]# cp /vhosts/www/phpMyAdmin-4.0.5-all-languages/ /usr/share/nginx/html/

[root@localhost ~]# cd /usr/share/nginx/html/
[root@localhost html]# ln -sv phpMyAdmin-4.0.5-all-languages/ PMA
"PMA" -> "phpMyAdmin-4.0.5-all-languages/"
[root@localhost html]# ls
50x.html  index.html  phpinfo.php  phpMyAdmin-4.0.5-all-languages PMA

  使用浏览器访问如下:

wKioL1gSFpqSAa18AAA8JY6gxrc992.png

   提示客户端错误,原因为我们这里的默认主页面index.php虽然已经在location中定义,但是没有在server中定义,所以再次修改nginx的配置文件如下:

wKioL1gSGBHgExkXAAAi8nmeUIA009.png

 

   修改好之后,保存退出,检测语法重载之后,再次刷新页面,可以正常访问,如下图:

wKioL1gSGFKiK1D-AAB8DmAsQik768.png

 后面基于mysql的认证登录等就不在这里做演示了可以参考之前的文档;

  7.接下来,我们使用ab命令来对文件中压测,看一下nginx接受并发响应的性能;

[root@localhost ~]# ab -c 100 -n 2000 http://192.168.1.17/PMA/index.php
This is ApacheBench, Version 2.3 <$Revision: 1430300 $>
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Licensed to The Apache Software Foundation, http://www.apache.org/

Benchmarking 192.168.1.17 (be patient)
Completed 200 requests
Completed 400 requests
Completed 600 requests
Completed 800 requests
Completed 1000 requests
Completed 1200 requests
Completed 1400 requests
Completed 1600 requests
Completed 1800 requests
Completed 2000 requests
Finished 2000 requests


Server Software:        nginx/1.10.0
Server Hostname:        192.168.1.17
Server Port:            80

Document Path:          /PMA/index.php
Document Length:        8141 bytes

Concurrency Level:      100
Time taken for tests:   121.663 seconds
Complete requests:      2000
Failed requests:        0
Write errors:           0
Total transferred:      18691104 bytes
HTML transferred:       16282000 bytes
Requests per second:    16.44 [#/sec] (mean)
Time per request:       6083.133 [ms] (mean)
Time per request:       60.831 [ms] (mean, across all concurrent requests)
Transfer rate:          150.03 [Kbytes/sec] received

Connection Times (ms)
              min  mean[+/-sd] median   max
Connect:        0    0   0.6      0       4
Processing:  1020 5982 644.2   6032    9814
Waiting:       79 5896 649.1   5984    9814
Total:       1020 5982 643.8   6032    9815

Percentage of the requests served within a certain time (ms)
  50%   6032
  66%   6149
  75%   6225
  80%   6285
  90%   6489
  95%   6638
  98%   6838
  99%   7106
 100%   9815 (longest request)

   8.我们在php-fpm的配置文件中开启了测试功能(ping/pong)和状态页status,之前我们在httpd中是通过添加单独的匹配条件代理至后端的,那在nginx中我们应该怎样设置呢?如下:

wKiom1gTPACip8YcAABZYM-fE14884.png   然后我们使用浏览器访问如下:

wKioL1gTPCaCDOd7AAAty9a6YeQ312.png

wKiom1gTPCfgW6I-AABABerCHUA474.png

 如上,就为简单部署成功了一个lnmp环境了。。。



 2.fastcgi的缓存

fastcgi_cache_path path

格式和适用位置:

# Syntax: 
    fastcgi_cache_path path [levels=levels] [use_temp_path=on|off] keys_zone=name:size [inactive=time] 
    [max_size=size] [manager_files=number] [manager_sleep=time] [manager_threshold=time] [loader_files=number] 
    [loader_sleep=time] [loader_threshold=time] [purger=on|off] [purger_files=number] [purger_sleep=time] 
    [purger_threshold=time];
    
  Default:—    
  Context:http  # 只能定义在http中

作用:

参数:

◆levels=levels:缓存目录的层级数量,以及每一级的目录数量;

◆keys_zone=name:size

◆inactive=time:非活动时长;

◆max_size=size:磁盘上用于缓存数据的缓存空间上限;

fastcgi_cache zone | off;

fastcgi_cache_key string;

fastcgi_cache_methods GET | HEAD | POST ...;

fastcgi_cache_min_uses number;

fastcgi_cache_valid [code ...] time;

定义使用缓存:

  1.首先要创建一个缓存的文件目录,实际生产环境中可以放在固态磁盘上或者Raid0上,这样I/O能力很强;(注意文可能需要修改属主和属组为nginx)

[root@localhost ~]# ls /var/cache/
abrt-di  fontconfig  httpd  krb5rcache  libvirt  nginx       realmd
cups     gdm         ibus   ldconfig    man      PackageKit  yum
[root@localhost ~]# ls /var/cache/nginx/
client_temp  fastcgi_temp  proxy_temp  scgi_temp  uwsgi_temp
[root@localhost ~]# mkdir /var/cache/nginx/fastcgi_cache

 2.因为缓存只能定义在http配置段,所以编辑主配置文件/etc/nginx/nginx.conf

wKiom1gSKq-giA-vAAA1kuTmCuw368.png

  3.如上,已经定义好了,但是要想调用,要定义在在server或者location中,因为我们这里针对的是fastcgi协议所以定义在php的location中,如下:

wKioL1gSLHKiPqIbAABCWrQKIbA289.png  

   4.定义好之后保存退出,检测语法,重载;然后用浏览器访问PMA,查看缓存如下

[root@localhost ~]# nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
[root@localhost ~]# nginx -s reload

[root@localhost ~]# tree /var/cache/nginx/fastcgi_cache/
/var/cache/nginx/fastcgi_cache/
└── 9
    └── 0e
        └── 3
            └── 9092aafd46eba60f9dd7f9eee97d30e9

3 directories, 1 file

   再访问http://192.168.1.17/phpinfo.php,查看缓存如下:

[root@localhost ~]# tree /var/cache/nginx/fastcgi_cache/
/var/cache/nginx/fastcgi_cache/
├── 0
│   └── 15
│       └── 4
│           └── 918e9e96dec978b2ec01d531bef84150
├── 9
│   └── 0e
│       └── 3
├── e
│   └── fd
│       └── 5
│           └── 98413616be76ca2adb60d2de52405fde
└── f
    └── a6
        └── 5
            └── f507ec3769c639b6261e1eb529305a6f


 3.fastcgi 的保持连接

fastcgi_keep_conn on | off;

作用:

ngx_http_ssl_module模块

 1.支持nginx能够运行为https服务

★ssl on | off;

★ssl_certificate file;

★ssl_certificate_key file;

★ssl_protocols [SSLv2] [SSLv3] [TLSv1] [TLSv1.1] [TLSv1.2];

★ssl_session_cache off | none | [builtin[:size]] [shared:name:size];

★ssl_session_timeout time;

配置示例:

wKioL1gTfsmAhAGFAAA-iojZreE719.png

 把80端口重定向到443上,然后关闭80服务;

wKiom1gTfK6grBw7AAAcqnxhL3M033.png

配置使ngins支持https协议:

  1.在rpm包安装的nginx的配置文件中没有对ssl的相关配置,所以这里我们在/etc/nginx/conf.d下新定义一个虚拟主机使其支持ssl,配置如下:

[root@localhost conf.d]# pwd
/etc/nginx/conf.d
[root@localhost conf.d]# vim ssl.conf
  1 server {
  2     listen 443 ssl;                               # 指明ssl监听的端口443,和ssl协议
  3     server_name                    # 主机名 
  4     root /vnhosts/ssl/htdocs;                     # ssl的路径
  5     ssl on                                        # 开启ssl功能
  6     ssl_certificate /etc/nginx/ssl/nginx.crt;     # 虚拟机使用的证书文件的路径
  7     ssl_certificate_key /etc/nginx/ssl/nginx.key; # 与其证书匹配的私钥文件路径
  8     ssl_session_cache shared:sslcache:20m;        # 定义使用共享缓存,名字为sslcache,大小为20M
  9 }

  2.为了测试,首先在自己的主机上创建私有CA,但是在互联网上公开使用时,一定要找公共CA去签署

   1)生成私钥文件 

[root@localhost ~]# cd /etc/pki/CA
[root@localhost CA]# ls
certs  crl  newcerts  private
[root@localhost CA]# ls private/
[root@localhost CA]# (umask 077;openssl genrsa -out private/cakey.pem 4096)
Generating RSA private key, 4096 bit long modulus
......++
........................................................................................................................................................................................................................................................................................................................................................................................................................................................................................++
e is 65537 (0x10001)
[root@localhost CA]# ls private/
cakey.pem

  2)生成自签证书

[root@localhost CA]# openssl req -new -x509 -key private/cakey.pem -out cacert.pem
You are about to be asked to enter infORMation that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [XX]:CN
State or Province Name (full name) []:Beijing
Locality Name (eg, city) [Default City]:Beijing
Organization Name (eg, company) [Default Company Ltd]:MageEdu
Organizational Unit Name (eg, section) []:taotao.com
Common Name (eg, your name or your server's hostname) []:ca.taotao.com
Email Address []:

[root@localhost CA]# ll
总用量 20
-rw-r--r--  1 root root 2037 10月 28 21:14 cacert.pem
drwxr-xr-x. 2 root root 4096 6月  29 2015 certs
drwxr-xr-x. 2 root root 4096 6月  29 2015 crl
drwxr-xr-x. 2 root root 4096 6月  29 2015 newcerts
drwx------. 2 root root 4096 10月 28 21:05 private

  3)为CA提供目录和文件

[root@localhost CA]# touch index.txt
[root@localhost CA]# echo 01 > serial
[root@localhost CA]# ls
cacert.pem  certs  crl  index.txt  newcerts  private  serial

 3.如上,创建CA完成,接下来要为nginx服务器签署CA请求

  1)创建用于httpd通信时的私钥

[root@localhost CA]# cd /etc/nginx/
[root@localhost nginx]# ls
conf.d          koi-utf  mime.types  nginx.conf      scgi_params   win-utf
fastcgi_params  koi-win  modules     nginx.conf.bak  uwsgi_params
[root@localhost nginx]# mkdir ssl
[root@localhost nginx]# cd ssl
[root@localhost ssl]# (umask 077;openssl genrsa -out nginx,key 2048)
Generating RSA private key, 2048 bit long modulus
......................+++
.................................................+++
e is 65537 (0x10001)

[root@localhost ssl]# ls
nginx,key   # 创建成功

  2)利用生成的私钥生成证书签署请求:

[root@localhost ssl]# openssl req -new -key nginx.key -out nginx.csr
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [XX]:CN
State or Province Name (full name) []:Beijing
Locality Name (eg, city) [Default City]:Beijing
Organization Name (eg, company) [Default Company Ltd]:MageEdu
Organizational Unit Name (eg, section) []:taotao.com
Common Name (eg, your name or your server's hostname) []:www.taotao.com
Email Address []:

Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge passWord []:
An optional company name []:

  4.接下来CA要为nginx签发证书(因为这里都是在本地主机生成的CA和httpd服务,所以不需要传送)

[root@localhost ssl]# openssl ca -in nginx.csr -out nginx.crt
Using configuration from /etc/pki/tls/openssl.cnf
Check that the request matches the signature
Signature ok
Certificate Details:
        Serial Number: 1 (0x1)
        Validity
            Not Before: Oct 28 13:29:07 2016 GMT
            Not After : Oct 28 13:29:07 2017 GMT
        Subject:
            countryName               = CN
            stateOrProvinceName       = Beijing
            organizationName          = MageEdu
            organizationalUnitName    = taotao.com
            commonName                = www.taotao.com
        X509v3 extensions:
            X509v3 Basic Constraints: 
                CA:FALSE
            Netscape Comment: 
                OpenSSL Generated Certificate
            X509v3 Subject Key Identifier: 
                8C:6E:F0:D0:2E:DF:52:22:6D:10:A9:25:74:BC:17:A5:2F:9C:42:DD
            X509v3 Authority Key Identifier: 
                keyid:79:9F:37:3C:86:41:08:6D:1F:85:09:2B:59:C6:B6:0D:63:CC:5A:57

Certificate is to be certified until Oct 28 13:29:07 2017 GMT (365 days)
Sign the certificate? [y/n]:y


1 out of 1 certificate requests certified, commit? [y/n]y
Write out database with 1 new entries
Data Base Updated

[root@localhost ssl]#  ls
nginx.crt # 签署的证书  nginx.csr  nginx.key

  5.如上,证书签署完成我们只需把生成的证书nginx.crt发送给客户端即可,现在我们检测语法nginx的语法,重载,查看ssl的443端口是否监听;

[root@localhost ssl]# nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
[root@localhost ssl]# nginx -s reload
[root@localhost ssl]# ss -tnl
State       Recv-Q Send-Q                                      Local Address:Port                                                     Peer Address:Port              
LISTEN      0      128                                             127.0.0.1:9000                                                                *:*                  
LISTEN      0      50                                                      *:3306                                                                *:*                  
LISTEN      0      128                                                     *:80                                                                  *:*                  
LISTEN      0      128                                                     *:22                                                                  *:*                  
LISTEN      0      128                                             127.0.0.1:631                                                                 *:*                  
LISTEN      0      100                                             127.0.0.1:25                                                                  *:*                  
LISTEN      0      128                                             127.0.0.1:6010                                                                *:*                  
LISTEN      0      128                                                     *:443                                                                 *:*                  
LISTEN      0      128                                             127.0.0.1:6011                                                                *:*                  
LISTEN      0      128                                                    :::22                                                                 :::*                  
LISTEN      0      128                                                   ::1:631                                                                :::*                  
LISTEN      0      100                                                   ::1:25                                                                 :::*                  
LISTEN      0      128                                                   ::1:6010                                                               :::*                  
LISTEN      0      128                                                   ::1:6011                                                               :::*

  6.接下来我们为在nginx中定义的虚拟主机创建root的路径,并提供测试页面

[root@localhost ssl]# mkdir /vnhosts/ssl/htdocs -pv
mkdir: 已创建目录 "/vnhosts"
mkdir: 已创建目录 "/vnhosts/ssl"
mkdir: 已创建目录 "/vnhosts/ssl/htdocs"
[root@localhost ssl]# vim /vnhosts/ssl/htdocs/index.html
 <h1>SSL Host</h1>

  在浏览器中访问如下:

wKioL1gTXpSBTWmTAADdv0sFisE855.png

 由上图可知:有两点错误:

 7.修改本地hosts文件,使其能够解析

[root@localhost ssl]# vim /etc/hosts
  1 127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
  2 ::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
  3 10.1.252.37       # 添加ip的解析

 8.导入CA机构的自签证书

wKioL1gTeATScUoxAADXubWBkY4989.png

  再次访问,可以正常访问,如下:

wKioL1gTXoODxfvDAABMdGx0QHI293.png


 因为我们现在在配置文件中定义了多个server,所以,如果不基于https协议访问,而使用http访问,还是会访问默认的主页面,如下:

wKiom1gTefyg8aOyAABnhmwZJLY085.png

  8.处于安全考虑,如果我想让用户访问网站都是通过https协议访问(即实现从80端口跳转到443端口)的话,就需要在另一个server添加rewritw重写uri,如下:

wKiom1gTfK6grBw7AAAcqnxhL3M033.png

  现在我们再去访问http://192.168.1.17,如下

wKiom1gTfOXTI8SRAAla7eXX-is026.gif


  这就是,为什么我们在平时访问网站时,明明使用的是http协议,但它会自动跳转使用到https协议,只不过是用到了rewrite重写罢了!!!

ngx_http_referer_module模块

 1.用于阻挡来源非法的域名请求(防盗链)

★valid_referers none | blocked | server_names | string ...; 

作用:

参数:

◆none:请求报文首部没有referer首部(也就是从浏览器中直接输入的);

◆blocked:请求报文的referer首部没有值;

◆server_names:参数,其可以有值作为主机名或主机名模式;

示例:

valid_referers none blocked server_names
               *.example.com example.* www.example.org/galleries/
               ~\.Google\.;

if ($invalid_referer) {
    return 403;
}

演示:

wKiom1gUF2rBq1tNAABJCtvwmWg075.png


解析:

  • 以上所有符合none,blocked,taotao.com、tao.com域名和域名中包含mgedu和firefox的站点都可以访问到当前站点的内容,如果来源域名不在这个列表中,那么$invalid_referer等于1,在if语句中返回一个403给用户,这样用户便会看到一个403的页面,如果使用下面的rewrite,那么盗链的内容都会被重写到www.taotao.com的主页面。

测试:

  使用curl命令模拟从tao.com magedu.com 和baidu.com跳转而来,结果发现前两个跳转都可以正常访问到内容,而从baidu跳转过来的则不能访问

[root@localhost conf.d]# curl -k -e "http://www.tao.com" "https://www.taotao.com/index.html"
<h1>SSL Host</h1>

[root@localhost conf.d]# curl -k -e "http://www.magedu.com" "https://www.taotao.com/index.html"
<h1>SSL Host</h1>

[root@localhost conf.d]# curl -k -e "http://www.baidu.com" "https://www.taotao.com/index.html"
<html>
<head><title>403 Forbidden</title></head>
<body bGColor="white">
<center><h1>403 Forbidden</h1></center>     # 不能正常访问返回结果为403 Forbidden
<hr><center>nginx/1.10.0</center>
</body>
</html>







--结束END--

本文标题: 3.Nginx配置进阶(三)

本文链接: https://lsjlt.com/news/187875.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • 3.Nginx配置进阶(三)
    nginx配置进阶(三)==============================================================================概述: 本章我们将会继续介绍Nginx中http段的配置,内...
    99+
    2023-01-31
    进阶 Nginx
  • Nginx进阶 配置-Nginx auth_basic 身份认证
    前言 在公司前期投入研发时,尤其针对于ZF的客户,往往是很多需求含糊不清,可项目的里程碑节点已是板上定钉。在这种情况下,需求组应和研发组协同推敲,不断的制定计划、出demo,拿着我们推测出的构建想法及原型去征求客户的意见。 对于大屏、驾驶舱...
    99+
    2023-08-18
    nginx 运维 服务器 java
  • Nginx配置段(3)
    安装方法: rpm及源码安装: # ./configure --prefix=/usr/local/nginx --conf-path=/etc/nginx/nginx.conf --user=nginx --group=n...
    99+
    2023-01-31
    Nginx
  • zabbix-进阶-3
    第三章;发现,自动注册和web监控报警实现:应该使用专用的邮箱服务实现,使用专用的账号和密码:使用飞信机器人,使用脚本实现发信息action动作:condition,operation(remote,com...
    99+
    2024-04-02
  • Python 3 进阶 —— prin
    在 Python 中,print 可以打印所有变量数据,包括自定义类型。在 2.x 版本中,print 是个语句,但在 3.x 中却是个内置函数,并且拥有更丰富的功能。 参数选项 可以用 help(print) 来查看 print 函数...
    99+
    2023-01-31
    进阶 Python prin
  • C语言进阶:指针的进阶(3)
    目录数组传参和指针传参一维数组传参二维数组传参一级指针传参二级指针传参总结数组传参和指针传参 实践之中不免会碰到数组和指针作函数参数而如何设计形参的问题。 一维数组传参 一维数...
    99+
    2024-04-02
  • Python进阶(三十三)-Python
      取得时间相关信息的话,要用到python time模块,python time模块里面有很多非常好用的功能,可以去官方文档了解下。时间戳是1970年到现在时间相隔的时间。   你可以试下下面的方式来取得当前时间的时间戳: ...
    99+
    2023-01-31
    进阶 Python 三十三
  • Nginx演练(3)配置内容压缩
    如果对HTTP熟悉的话,对request-response请求过程应该很熟悉。比如访问“www.jd.com",一个完整页面的访问,往往会经过很多次的HTTP请求共同完成,这中间会涉及到浏览器并发数。具体片段如图客户端请求的资源内容有多种,...
    99+
    2023-01-31
    内容 Nginx
  • python装饰器3:进阶
    装饰器1:函数装饰器 装饰器2:类装饰器 装饰器3:进阶 函数装饰器装饰方法 函数装饰器装饰普通函数已经很容易理解了: @decorator def func():... #等价于 def func():... func = dec...
    99+
    2023-01-30
    进阶 python
  • Python 3 进阶 —— 使用 P
    PyMySQL 是一个纯 Python 实现的 MySQL 客户端操作库,支持事务、存储过程、批量执行等。 PyMySQL 遵循 Python 数据库 API v2.0 规范,并包含了 pure-Python MySQL 客户端库。 安装...
    99+
    2023-01-31
    进阶 Python
  • Powershell进阶学习(3) Po
       我们首先要理解什么是远程管理,远程管理方式有很多比如最常用的Windows远程桌面管理,linux的SSH等。那么今天说起的是Windows一种最新的远程管理方式winrm(windows远程管理),当然在windowsServer...
    99+
    2023-01-31
    进阶 Powershell Po
  • python进阶(十三、mysql:PyMySQL)
    mysql数据库 15 使用python操作mysql数据库(PyMySQL) 3.15.1. PyMySQL的安装 1)使用命令安装:pip install pymysql 2)使用Pycharm安装 2. python连接数据库 ...
    99+
    2015-08-11
    python进阶(十三 mysql:PyMySQL) 数据库入门 数据库基础教程 数据库 mysql
  • Python进阶(三十四)-Python
    线程讲解   多线程类似于同时执行多个不同程序,多线程运行有如下优点: 使用线程可以把占据长时间的程序中的任务放到后台去处理。 用户界面可以更加吸引人,这样比如用户点击了一个按钮去触发某些事件的处理,可以弹出一个进度条来显示处...
    99+
    2023-01-31
    进阶 Python 三十四
  • 如何进行nginx配置ssl加密
    这篇文章将为大家详细讲解有关如何进行nginx配置ssl加密,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。nginx下配置ssl本来是很简单的,无论是去认证中心买SSL安全证书还是自签署证书...
    99+
    2023-06-04
  • 怎么进行Nginx配置文件引用
    怎么进行Nginx配置文件引用,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。Nginx配置文件有很多需要我们注意很多问题,其中在进行use...
    99+
    2024-04-02
  • nginx+php配置
    安装php yum install php #检查版本 php -v 安装nginx(根据我们自己的Nginx安装,以下可以不看) yum install nginx或者执行下面的步骤: 安装: 1.在vim /etc/p...
    99+
    2023-08-31
    nginx php 运维
  • Docker配置nginx
    1.Docker安装nginx 安装的命令 sudo docker search nginxdocker pull nginx 查看是否安装 docker images 运行测试nginx docker run --name nginx-...
    99+
    2023-08-20
    docker nginx 运维 ubuntu 服务器
  • java进阶之了解SpringBoot的配置原理
    目录一、Spring Boot的特点二、了解容器的功能三、原配置文件的引入四、自动配置原理五、修改默认配置(约定大于配置)六、总结一、Spring Boot的特点 首先我们要知道 S...
    99+
    2024-04-02
  • 如何进行Nginx高性能优化配置
    本篇文章为大家展示了如何进行Nginx高性能优化配置,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。Nginx是Apache服务不错的替代品。其特点是占有内存少,并发能力强,事实上nginx的并发能力...
    99+
    2023-06-15
  • mysql进阶(三)MHA高可用集群
    简介: 1、MHA目前在MySQL高可用方面是一个相对成熟的解决方案,是MySQL高可用环境下故障切换和主从提升的高可用软件 2、MHA能在短时间内完成故障切换,并且在最大程度上保证数据的一致性,以达到真正...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作