简体   繁体   English

nginx将非www重定向到www和https

[英]nginx Redirect non-www to www and https

Here is my code for my nginx configuration: 这是我的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;
    #}
}

here is what im trying to do: 这是我想要做的:

i put it in my default file for configuration and it does not work. 我把它放在我的默认文件中进行配置,但它不起作用。 the error I get is that the redirect is not redirecting properly. 我得到的错误是重定向没有正确重定向。 can someone please help? 有人可以帮忙吗? thanks!!! 谢谢!!!

You'll need the following server blocks: 您将需要以下服务器块:

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;
}

1sloc anwser doesn't work as it should for me. 1sloc anwser对我来说不起作用。 What if visitor goes to https://example.com/ ? 如果访问者访问https://example.com/怎么办?

Edit: I just realized that I almost have the same config as you, why it's not working for you? 编辑:我刚刚意识到我几乎和你有相同的配置,为什么它不适合你?

I use the following config. 我使用以下配置。

# 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;

}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM