发布于 2016-02-12 08:46:50 | 269 次阅读 | 评论: 0 | 来源: 网友投递

这里有新鲜出炉的Nginx中文文档,程序狗速度看过来!

Nginx WEB服务器

Nginx 是一个高性能的 HTTP 和 反向代理 服务器,也是一个 IMAP/POP3/SMTP 代理服务器。 Nginx 是由 Igor Sysoev 为俄罗斯访问量第二的 Rambler.ru 站点开发的,第一个公开版本0.1.0发布于2004年10月4日。其将源代码以类BSD许可证的形式发布,因它的稳定性、丰富的功能集、示例配置文件和低系统资源的消耗而闻名。


这篇文章主要介绍了Nginx服务器中HTTP 301跳转到带www的域名的方法,包括从HTTPS 301提示跳转等rewrite相关的方法,需要的朋友可以参考下

从nginx的官方文档 documentation, 正确的nginx https 301跳转到带www域名方法的方法如下:

HTTP 301跳转到带www域名方法

   

 server {

        listen       80;

        server_name  example.org;

        return       301 http://www.example.org$request_uri;

    }

    server {
        listen       80;
        server_name  www.example.org;
        ...
    }   

HTTPS 301跳转到带www域名方法

 

   server {

            listen 80;

            server_name www.domain.com;

            // $scheme will get the http protocol

            // and 301 is best practice for tablet, phone, desktop and seo

            return 301 $scheme://domain.com$request_uri;

    }

     

    server {

            listen 80;

            server_name domain.com;

            // here goes the rest of your config file

            // example 

            location / {

     

                rewrite ^/cp/login?$ /cp/login.php last;

                // etc etc...

     

            }

    }

    

要先用 nginx -v  命令检查你所说使用的nginx的版本. 下面是对于旧版本的nginx301跳转到带www域名方法从www.ksharpdabu.info 跳转到  ksharpdabu.info

   

server {

        server_name  www.domain.com;

        rewrite ^(.*) http://domain.com$1 permanent;

    }

    server {
        server_name  domain.com;
        #The rest of your configuration goes here#
    }


所以需要两个server段。

从ksharpdabu.info 跳转到  www.ksharpdabu.info

   

server {

        server_name  domain.com;

        rewrite ^(.*) http://www.domain.com$1 permanent;

    }

    server {
        server_name  www.domain.com;
        #The rest of your configuration goes here#
    }


按上面设置后,用rewrite的方法跳转到指定的域名下,利于SEO
下面是我举例,从www.google.com 跳转到 google.com的部分nginx配置内容:

   

server {

        server_name  www.google.com;

        rewrite ^(.*) http://google.com$1 permanent;

    }

    server {

           listen 80;

           server_name google.com;

           index index.php index.html;

           ####

           # now pull the site from one directory #

           root /var/www/www.google.com/web;

           # done #

           location = /favicon.ico {

                    log_not_found off;

                    access_log off;

           }

    }


网上还有一种不用rewirte的 方法,如下:

   

server {

        #listen 80 is default

        server_name www.example.com;

        return 301 $scheme://example.com$request_uri;

    }

    server {
        #listen 80 is default
        server_name example.com;
        ## here goes the rest of your conf...
    }


因为return可以用于所有的版本,而rewrite可能因为版本的不同,导致301出错。而且可以直接停止执行匹配和搜索。

下面包含了http和https的。同一个服务器。

   

server {

        listen 80;

        listen 443 ssl;

        server_name www.example.com;

        return 301 $scheme://example.com$request_uri;

    }

    server {
        listen 80;
        listen 443 ssl;
        server_name example.com;
        # rest goes here...
    }


$scheme 变量只会包含http 如果你的服务器只监听80端口(默认是80端口)同时监听的选项中不含ssl关键字 . 不适用这个变量,就不能获得你所想的要的跳转结果。

将所有http强制跳到https, SSL (personal config on UNIX with IPv4, IPv6, SPDY, ...):

#

# Redirect all www to non-www

#

server {

    server_name          www.example.com;

    ssl_certificate      ssl/example.com/crt;

    ssl_certificate_key  ssl/example.com/key;

    listen               *:80;

    listen               *:443 ssl spdy;

    listen               [::]:80 ipv6only=on;

    listen               [::]:443 ssl spdy ipv6only=on;

    return 301 https://example.com$request_uri;
}

#
# Redirect all non-encrypted to encrypted
#
server {
    server_name          example.com;
    listen               *:80;
    listen               [::]:80;

    return 301 https://example.com$request_uri;
}

#
# There we go!
#
server {
    server_name          example.com;
    ssl_certificate      ssl/example.com/crt;
    ssl_certificate_key  ssl/example.com/key;
    listen               *:443 ssl spdy;
    listen               [::]:443 ssl spdy;

    # rest goes here...
}
 
#
# Redirect all www to non-www
#
server {
    server_name          www.example.com;
    ssl_certificate      ssl/example.com/crt;
    ssl_certificate_key  ssl/example.com/key;
    listen               *:80;
    listen               *:443 ssl spdy;
    listen               [::]:80 ipv6only=on;
    listen               [::]:443 ssl spdy ipv6only=on;
 
    return 301 https://example.com$request_uri;
}
 
#
# Redirect all non-encrypted to encrypted
#
server {
    server_name          example.com;
    listen               *:80;
    listen               [::]:80;
 
    return 301 https://example.com$request_uri;
}
 
#
# There we go!
#
server {
    server_name          example.com;
    ssl_certificate      ssl/example.com/crt;
    ssl_certificate_key  ssl/example.com/key;
    listen               *:443 ssl spdy;
    listen               [::]:443 ssl spdy;
 
    # rest goes here...
}
 



最新网友评论  共有(0)条评论 发布评论 返回顶部
推荐阅读
最新资讯

Copyright © 2007-2017 PHPERZ.COM All Rights Reserved   冀ICP备14009818号  版权声明  广告服务