Nginx配置4种模式跳转到指定统一域名

u=3379754713,1922618047&fm=26&gp=0.jpg

最近全栈导航启用了https,谷歌要求的是访问http://xxxxx.com 也能访问,也在网络上找了下都不是很齐全,要么报错,要么达不到要求,只有本身尝动手尝试了,而且成功记录如下nginx配置完成目标html

目的须要将如下地址都统一跳转到 https 的根域名 https://www.itnavs.comlinux

直接先配置

server {
        # 80端口是http正常访问的接口
        listen 80;
        server_name itnavs.com,www.itnavs.com;
        return 301 https://www.itnavs.com$request_uri;
}
server {
        listen 443;
        server_name itnavs.com;
        return 301 https://www.itnavs.com$request_uri;
}
server {
         listen 443 default_server ssl;
         server_name  www.itnavs.com;

    # 根据本身的域名加载证书以及证书相关协议套件配置
      ssl_certificate_key 2_www.xxx.com.key;
        ssl_session_timeout 5m;
        ssl_protocols TLSv1 TLSv1.1 TLSv1.2; #协议配置
        ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;#套件配置
        ssl_prefer_server_ciphers on;
         
    #静态文件缓存
    location ~ .*\.(?:jpg|jpeg|gif|png|ico|cur|gz|svg|svgz|mp4|ogg|ogv|webm)$
        {
            expires    360d;
        }
    # 其余配置
}
  1. 第一段代码是若是用户访问的是默认端口,也就是80,也就是http,而后用301转发到https上
  2. 第二段代码是若是用户访问的是443端口,也就是https,而后用301也转发到https上
  3. 第三段代码是上面配置的两个server都跳转到了443端口,而且是www.itnavs.com 带www的,因此都走到了这个配置,因此这个应对https的请求,挂载https证书,以及其余代理转发,静态资源缓存都在这里配置

使用rewrite

其实上面配置也阔以这样写nginx

server {
    # 80端口是http正常访问的接口
    listen 80;
    server_name itnavs.com,www.itnavs.com;
    rewrite ^(.*) https://$host$1 permanent; #这里用的rewrite
}

先看一下rewrite的语法,rewrite regex replacement [flag]
rewrite: 该指令是实现URL重写的指令
regex 用于匹配URI的正则表达式
replacement:将regex正则匹配到的内容替换成 replacement
flag有以下值:web

  • last: 本条规则匹配完成后,继续向下匹配新的location URI 规则。(不经常使用)
  • break: 本条规则匹配完成即终止,再也不匹配后面的任何规则(不经常使用)。
  • redirect: 返回302临时重定向,浏览器地址会显示跳转新的URL地址。
  • permanent: 返回301永久重定向。浏览器地址会显示跳转新的URL地址。

为何要用301

301永久重定向能够把搜索引擎的权重所有集中到https://www.itnavs.com正则表达式

补充点防盗链知识

什么是防盗链?

盗链能够理解盗图连接,也就是说把别人的图片偷过来用在本身的服务器上,那么防盗链能够理解为防止其余人把个人图片盗取过去。windows

实现防盗链:

使用http协议中请求头部的Referer头域来判断当前访问的网页或文件的源地址。经过该头域的值,咱们能够检测访问目标资源的源地址。若是目标源地址不是咱们本身站内的URL的话,那么这种状况下,咱们采起阻止措施,实现防盗链。可是注意的是:Referer头域中的值是能够被更改的。所以该方法也不能彻底安全阻止防盗链。之间转载过一篇是利用的服务端来实现的图片防盗链的实现既然如此简单浏览器

利用$invalid_referer变量

咱们设置valid_referers 指令后,会将其结果传递给一个变量$invalid_referer,其值为0或1,能够使用这个指令来实现防盗链功能,若是valid_referers列表中没有包含Referer头的值,$invalid_referer将被设置为1缓存

设置防盗链白名单

白名单就是只容许白名单内的域名访问,其他一概禁止安全

location ~ .*\.(gif|jpg|jpeg|png|bmp|swf|flv|mp4|ico|webp)$ {
    valid_referers none blocked *.abc.com *.def.com;
    if ($invalid_referer) {
        return 403;
    }
}

上面的配置含义是先用location匹配出须要的格式(图片和视频),而后用valid_referers指令设置容许的域名,其它域名没有包含在valid_referers列表中,$invalid_referer变量返回的值为1,最终返回403,禁止访问。以上就是防盗链白名单的设置bash

防盗链黑名单

location ~ .*\.(gif|jpg|jpeg|png|bmp|swf|flv|mp4|ico|webp)$ {
    valid_referers *.baidu.com;
    if ($invalid_referer = 0) {
        return 403;
    }
}

黑名单与白名单正好相反,就是只禁止黑名单中的域名请求,其他一概放行,相比白名单,黑名单的限制更加宽松,上面的配置中咱们用valid_referers指令设置黑名单域名*.baidu.com,获取到指定的Referer头以后,$invalid_referer返回值为0,最终返回403,禁止百度的域名来访问

Nginx启动与中止

注意不要直接双击nginx.exe,这样会致使修改配置后重启、中止nginx无效,须要手动关闭任务管理器内的全部nginx进程
在nginx.exe目录,打开命令行工具,用命令 启动/关闭/重启nginx

start nginx : 启动nginx
nginx -s reload  :修改配置后从新加载生效
nginx -s reopen  :从新打开日志文件
nginx -t -c /path/to/nginx.conf 测试nginx配置文件是否正确

关闭nginx:
nginx -s stop  :快速中止nginx
nginx -s quit  :完整有序的中止nginx

遇到报错:
bash: nginx: command not found
有多是你再linux命令行环境下运行了windows命令
若是你以前是容许 nginx -s reload报错, 试下 ./nginx -s reload

相关文章

Nginx中的Rewrite的重定向配置与实践
Nginx设置图片防盗链(白名单与黑名单

相关文章
相关标签/搜索