17

次のように、同じホストに http:// と https:// があります。

server {

    listen   80;
    listen   443 ssl;

    ...
    ...
}

私がする必要があるのは、私のショップにアクセスするユーザーを https:// にリダイレクトすることです。問題は、私が多くの言語を持っていることです:

https://mydomain.com/ en /shop https://mydomain.com/ fr /shop など...

私はこれを試しましたが、うまくいきませんでした(nginx: configuration file /etc/nginx/nginx.conf test failed):

if ($server_port = 80) {
    location (en|fr)/shop {
        rewrite ^ https://$host$request_uri permanent;
    }
}
4

5 に答える 5

47

また、if ステートメントを使用する代わりに 301 リダイレクトを行うことも、NGINX のベスト プラクティスになります ( http://wiki.nginx.org/Pitfallsのサーバー名を参照)。SSL、Rails、およびUnicorn用に構成されたnginx.confで要点を作成しました

https://gist.github.com/Austio/6399964

これがあなたに関連するセクションです。

server {
    listen      80;
    server_name domain.com;
    return 301  https://$host$request_uri;
}
于 2013-09-18T14:36:18.897 に答える
11

またはさらに良いことに、ハードコーディングされたサーバー名を避けます

server {
  listen 80;
  rewrite (.*) https://$http_host$1 permanent;
}
于 2014-03-21T02:23:07.893 に答える
6

のマッチングに正規表現を使用するには、式の前にまたはlocationを付ける必要があります。~~*

if ($server_port = 80) {
    location ~ (en|fr)/shop {
        rewrite ^ https://$host$request_uri permanent;
    }
}

ドキュメントから:

正規表現を使用するには、プレフィックスを使用する必要があります。

  1. "~"大文字と小文字を区別するマッチング
  2. "~*"大文字と小文字を区別しない一致

nginxでは、ブロックをブロックlocation内にネストすることが許可されていないifため、次の構成を試してください。

if ($server_port = 80) {
    rewrite ^/(en|fr)/shop https://$host$request_uri permanent;
}
于 2013-08-30T00:48:39.287 に答える
2

error_page 497 の別の方法

server {
    listen 80;
    listen 443;

    ssl on;
    error_page 497  https://$host$request_uri;
    ssl_certificate     /etc/ssl/certs/ssl-cert-snakeoil.pem;
    ssl_certificate_key /etc/ssl/private/ssl-cert-snakeoil.key;
...
于 2014-04-15T17:37:22.713 に答える