将所有流量重定向到https:// www。在nginx上

时间:2016-06-04 23:12:59

标签: php nginx symfony-1.4

我一直试图解决这个问题。

无论用户放入网址栏,我都想将所有流量重定向到https。

由于会话需要始终为NO-WWW或始终使用WWW

这是我当前的nginx配置。

我需要做些什么改变才能将所有内容重定向到https?

server {
  listen 80;
  listen 443;

  server_name example.com www.example.com;
  access_log /var/log/nginx/example-access.log;
  error_log /var/log/nginx/example-error.log;
  root /var/www/html/web;

  index index.html index.htm index.php;

  location / {
     try_files $uri $uri/ /index.php$uri?$args;
  }

  rewrite ^/backend\.php/?(.*)$ /$1 permanent;
    location /admin {
    index admin content backend.php;
    try_files $uri @rewriteapp;
  }

 location @rewriteapp {
    rewrite ^(.*)$ /backend.php/$1 last;
  }

 location ~ "^(.+\.php)($|/)" {
    fastcgi_split_path_info ^(.+\.php)(.*)$;
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    fastcgi_param SCRIPT_NAME $fastcgi_script_name;
    fastcgi_param PATH_INFO $fastcgi_path_info;
    fastcgi_pass   127.0.0.1:9000;
    include        fastcgi_params;
  }
}

1 个答案:

答案 0 :(得分:0)

您需要两个服务器块,这是nginx

的最佳做法
server {
    listen 80;
    server_name example.com www.example.com;
    return 301 https://$server_name$request_uri;
}

server {
    listen 443 ssl;
    server_name example.com www.example.com;

    ssl_certificate     mycert.crt;
    ssl_certificate_key mycert.key;
    ssl_protocols       TLSv1 TLSv1.1 TLSv1.2;
    ssl_ciphers         HIGH:!aNULL:!MD5;

    ... (all the locations, index and etecetras)
}

请注意,您必须listen 443 ssl使用enable ssl。否则nginx将非常乐意在端口443上通过HTTP提供内容。

我没有在您的问题中看到SSL证书或允许的协议/密码,因此我将其添加到答案中以防万一。

请注意,浏览器会记住301。一旦浏览器看到301,它将永远重定向(或直到您销毁其缓存)。出于调试目的,最好使用302,然后在生产中将其更改为301