nginx将非www重定向到www和https

时间:2016-10-27 18:11:19

标签: ubuntu redirect ssl nginx web

这是我的nginx配置代码:

server {
    listen 80;
    server_name example.com www.example.com;
    return 301 https://www.example.com$request_uri;
}

server {
    listen 443 ssl;
    server_name example.com;
    ssl_certificate /etc/ssl/example.com.crt;
    ssl_certificate_key /etc/ssl/example.com.key;
    return 301 https://www.example.com$request_uri;
}


server {
    listen 443 ssl;
    server_name www.example.com;
    ssl_certificate /etc/ssl/example.com.crt;
    ssl_certificate_key /etc/ssl/example.com.key;

    root /usr/share/nginx/html;
    index index.php index.html index.htm;

    location / {
        # First attempt to serve request as file, then
        # as directory, then fall back to displaying a 404.
        try_files $uri $uri/ =404;
        # Uncomment to enable naxsi on this location
        # include /etc/nginx/naxsi.rules
    }

    error_page 404 /404.html;
    error_page 500 502 503 504 /50x.html;
    location = /50x.html {
        root /usr/share/nginx/html;
    }

    location ~ \.php$ {
        try_files $uri =404;
        fastcgi_split_path_info ^(.+\.php)(/.+)$;
        fastcgi_pass unix:/var/run/php5-fpm.sock;
        fastcgi_index index.php;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        include fastcgi_params;
    }

    # Only for nginx-naxsi used with nginx-naxsi-ui : process denied requests
    #location /RequestDenied {
    #   proxy_pass http://127.0.0.1:8080;    
    #}

    #error_page 404 /404.html;

    # redirect server error pages to the static page /50x.html
    #
    #error_page 500 502 503 504 /50x.html;
    #location = /50x.html {
    #   root /usr/share/nginx/html;
    #}

    # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
    #
    #location ~ \.php$ {
    #   fastcgi_split_path_info ^(.+\.php)(/.+)$;
    #   # NOTE: You should have "cgi.fix_pathinfo = 0;" in php.ini
    #
    #   # With php5-cgi alone:
    #   fastcgi_pass 127.0.0.1:9000;
    #   # With php5-fpm:
    #   fastcgi_pass unix:/var/run/php5-fpm.sock;
    #   fastcgi_index index.php;
    #   include fastcgi_params;
    #}

    # deny access to .htaccess files, if Apache's document root
    # concurs with nginx's one
    #
    #location ~ /\.ht {
    #   deny all;
    #}
}

这是我想要做的事情:

我把它放在我的默认文件中进行配置,但它不起作用。我得到的错误是重定向没有正确重定向。有人可以帮忙吗?感谢!!!

2 个答案:

答案 0 :(得分:1)

您需要以下服务器块:

server {
    server_name example.com;
    return 301 https://www.example.com/$request_uri;
}

server {
    listen 80;
    server_name www.example.com;
    return 301 https://www.example.com/$request_uri;
}

答案 1 :(得分:-1)

1sloc anwser对我来说不应该工作。如果访问者访问https://example.com/会怎样?

编辑:我刚才意识到我几乎和你一样拥有相同的配置,为什么它不适合你呢?

我使用以下配置。

# Redirect http traffic to https://www.
server {
  listen [::]:80;
  listen 80;

  server_name example.com www.example.com;

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

# Redirect https traffic to https://www.
server {
    listen [::]:443 ssl http2;
    listen 443 ssl http2;

    # listen on the wrong host
    server_name example.com;

    # Paths to SSL certificate files.
    ssl_certificate         /etc/ssl/ssl-example.com.crt;
    ssl_certificate_key     /etc/ssl/ssl-example.com.key;
    ssl_trusted_certificate /etc/ssl/ssl-example.com.crt;

    ssl_dhparam         /etc/ssl/ssl-example.com.pem;

    # Include defaults for allowed SSL/TLS protocols and handshake caches.
    include /etc/nginx/custom/ssl.conf;


    # and redirect to the non-www host (declared below)
    return 301 https://www.example.com$request_uri;
}

# Main https://www. server block
server {
    listen [::]:443 ssl http2;
    listen 443 ssl http2;

    # listen on the wrong host
    server_name example.com;

    # Paths to SSL certificate files.
    ssl_certificate         /etc/ssl/ssl-example.com.crt;
    ssl_certificate_key     /etc/ssl/ssl-example.com.key;
    ssl_trusted_certificate /etc/ssl/ssl-example.com.crt;

    ssl_dhparam         /etc/ssl/ssl-example.com.pem;

    # Include defaults for allowed SSL/TLS protocols and handshake caches.
    include /etc/nginx/custom/ssl.conf;

    root /data/sites/example.com/;
    index index.html index.phtml;

}