ssl用于nginx服务器配置中的子目录

时间:2012-01-26 17:04:13

标签: ssl nginx

我有一个运行ssl的nginx服务器。 目前我已为所有目录启用了https。 如何仅为www.example.com/shop/*目录启用ssl并为其他目录启用?

这是我的conf文件:

    # Redirect everything to the main site.
server {
  server_name *.example.com;
  listen 80;
  ssl on;
  ssl_certificate /opt/nginx/conf/server.crt;
  ssl_certificate_key /opt/nginx/conf/server.key; 
  keepalive_timeout    70;

  access_log  /home/example/nginx_logs/access.log ;
  error_log  /home/example/nginx_logs/error.log ;

  root /home/example/public_html/example.com;   
  location ~ \.php$ {
      try_files $uri $uri/ /index.php?q=$uri&$args;         
      root          /home/example/public_html/example.com/;
      fastcgi_pass   127.0.0.1:9000;
      fastcgi_index  index.php;
      include        /opt/nginx/conf/fastcgi_params;
      #fastcgi_param   SCRIPT_FILENAME    $document_root$fastcgi_script;
      fastcgi_param   SCRIPT_NAME        $fastcgi_script_name;
      fastcgi_param  SCRIPT_FILENAME  /home/example/public_html/example.com$fastcgi_script_name;
      index  index.php index.html index.htm;   
  }

    if ($http_host != "example.com") {
        rewrite ^ http://example.com$request_uri permanent;
    }

    include global/restrictions.conf;

    # Additional rules go here.

    #Only include one of the files below.
    include global/wordpress.conf;
#   include global/wordpress-ms-subdir.conf;
#   include global/wordpress-ms-subdomain.conf;
}

tnanks, d

1 个答案:

答案 0 :(得分:11)

在Nginx中很容易实现。它涉及两个步骤。

  1. 只有访问yourdomain.com/shop时才会使用端口443。所有其他请求将被重定向到端口80(HTTP)
  2. 端口80将检查yourdomain.com/shop。如果找到,它将被重定向到端口443(HTTPS)。
  3. 以下是对如何完成的快速概述......

    server {
      listen 443;
      server_name yourdomain.com;
    
      # directives for SSL certificates
    
      # root, index, error_log, access_log directives
    
      location /shop {
        # directives to handle what's inside /shop, for example
        # try_files $uri $uri/ /index.php;
      }
    
      location ~ \.php$ {
        # directives to handle PHP files
      }
    
      # leave everything else to port 80
      location / {
        rewrite ^ http://$host$request_uri permanent;
      }
    }
    
    server {
      listen 80;
      server_name yourdomain.com;
    
      # root, index, error_log, access_log directives
    
      # redirect yourdomain.com/shop to port 443
      # Please put this before location / block as
      # nginx stops after seeing the first match
      location /shop {
        rewrite ^ https://$host$request_uri permanent;
      }
    
      location / {
        # directives to handle what's inside /, for example
        # try_files $uri $uri/ /index.php;
      }
    
      location ~ \.php$ {
        # directives to handle PHP files
      }
    
    }