2012-01-26 14 views
3

sginを有効にして実行しているnginxサーバがあります。 現在、すべてのディレクトリでhttpsを有効にしています。 どのようにwww.example.com/shop/*のディレクトリだけにsslを有効にし、他には無効にしますか?nginxサーバ設定内のサブディレクトリ用のssl

# 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

+0

...それを行うことができる方法の簡単な概要ではありません。 'ssl'は、' http'または 'server'の中にしか存在しない指示文です(ドキュメントの状態として) –

答えて

11

それはnginxの中で達成するのは簡単です:

は、ここに私のconfファイルです。それには2つのステップがあります。

  1. yourdomain.com/shopにアクセスする場合にのみ、ポート443が使用されます。他のすべてのリクエストはポート80(HTTP)にリダイレクトされます
  2. ポート80はyourdomain.com/shopを確認します。見つかった場合は、ポート443(HTTPS)にリダイレクトされます。ここで

まさか

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 
    } 

} 
+1

@atmosxとタイプミスを修正してくれてありがとう。 –