SSL証明書を購入した後、すべてのページをセキュリティで保護されたhttpsおよびwwwに強制しようとしています。
https://www.exampl.com は機能していて安全ですが、正確に入力した場合のみです。 www.example.comまたはexample.comはまだhttpを指しています。
Nginxをプロキシとして使用し、そこに書き換えを入力する必要があります。 PuTTY経由でのSSH/rootアクセスがあります。 PuTTYに入力してnginx.confにアクセスしました。
今何?このページでnginxコマンドを入力しますか?カーソルのある場所から始めますか?最初にコマンドラインはありますか?
HTTPS:
。htacess –nginxに入力する必要があることがわかる前に与えられた元のコード
RewriteEngine On
RewriteCond %{HTTP_Host} ^example.com [NC]
RewriteCond %{SERVER_PORT} 80
RewriteRule ^(.*)$ https://www.example.com/$1 [R,L]
Nginxコードコンバーター–これは、コンバーターで表示される方法です。すべてが正しい行にありますか?
# nginx configuration location / {
if ($http_Host ~* "^example.com"){
rewrite ^(.*)$ http://example.com/$1 redirect; } }
その後
[〜#〜] www [〜#〜]
。htacess –nginxに入力する必要があることがわかる前に与えられた元のコード
#Force www:
RewriteEngine on
RewriteCond %{HTTP_Host} ^example.com [NC]
RewriteRule ^(.*)$ http://www.example.com/$1 [L,R=301,NC]
Nginxコードコンバーター–これは、コンバーターで表示される方法です。すべてが正しい行にありますか?
# nginx configuration location / {
if ($http_Host ~* "^example.com"){
rewrite ^(.*)$ http://www.example.com/$1 redirect; }
}
保存しますか?再起動?
どんな助けでも大歓迎です。私はこれを何週間も戦い続けてきました。私のホスティング会社はできる限りの支援をしてくれましたが、今はその場で学習しています…。それとも、開発者を止めて雇うべきですか? $$$
ありがとう
WWWおよびHTTPSリダイレクトを実装する最良の方法は、Nginx構成に新しいserver
セクションを作成することです。
server {
listen 80; #listen for all the HTTP requests
server_name example.com www.example.com;
return 301 https://www.example.com$request_uri;
}
https://example.com から https://www.example.com へのリダイレクトも実行する必要があります。これは、次のようなコードで実行できます。
server {
listen 443 ssl;
server_name example.com;
ssl_certificate ssl.crt; #you have to put here...
ssl_certificate_key ssl.key; # ...paths to your certificate files
return 301 https://www.example.com$request_uri;
}
そしてもちろん、変更するたびにNginx設定をリロードする必要があります。ここにいくつかの便利なコマンドがあります:
構成のエラーをチェックします:
Sudo service nginx configtest
リロード設定(これで「作業」を変更するには十分です):
Sudo service nginx reload
ウェブサーバー全体を再起動します:
Sudo service nginx restart
server
セクションはすべてhttp
セクション内(またはhttp
セクションに含まれるファイル内)にある必要があります。
http {
# some directives ...
server {
# ...
}
server {
# ...
}
# ...
}
次の解決策は明確かつ単純で、すべて1つのサーバーブロックで定義されています。したがって、この設定では、すべてを https://www.domain.tld に強制します。そのため、両方のハンドラーは、ここではHTTPS以外でHTTPS以外のWWWです。 IFは2つありますが、SSLブロック全体を2回複製して処理したくない場合は、これがその方法です。
server {
listen 80;
listen 443 ssl;
server_name domain.tld www.domain.tld;
# global HTTP handler
if ($scheme = http) {
return 301 https://www.domain.tld$request_uri;
}
# global non-WWW HTTPS handler
if ($http_Host = domain.tld){
return 303 https://www.domain.tld$request_uri;
}
}
そしてIFを避けるためのさらに良い解決策:
# Redirect all traffic from HTTP to HTTPS
server {
listen 80;
server_name example.com www.example.com;
# Destination redirect base URI
set $RURI https://www.example.com;
location / {return 301 $RURI$request_uri;}
}
# Redirect non-WWW HTTPS traffic to WWW HTTPS
server {
listen 443 ssl;
# NOTE: SSL configuration is defined elsewhere
server_name example.com;
return 301 $scheme://www.$Host$request_uri;
}
# MAIN SERVER BLOCK
server {
listen 443 ssl;
# NOTE: SSL configuration is defined elsewhere
server_name www.example.com;
}
サイト対応のディレクトリがある場合は、「http」トップディレクティブを使用しないでください。サイトが有効なディレクトリに次のファイルを(任意の名前で)作成するだけです。
server {
listen 80; #listen for all the HTTP requests
server_name example.com www.example.com;
return 301 https://www.example.com$request_uri;
}
行をコメント化します
listen 80;
ここで、server_nameはwww.example.comを提供する他のファイルと同じです