Nginxリライトケースコンバット(エラーページリダイレクト、仮想ディレクトリエイリアスリダイレクト、ドメイン名リダイレクト)
この環境は、Nginx学習環境を構築するためのCentos 7.8システムに基づいています。
具体的な構築については、Nginx-1.18.0環境の展開を参照してください。
Nginx rewriteは、Apacheや他のWebサービスソフトウェアと同じです。Nginxrewriteの主な機能は、URLアドレスの書き換えを実現することです。Nginxの書き換えルールには、PCREソフトウェアのサポートが必要です。つまり、ルールの照合は、Perl互換の正規表現文法を介して実行されます。
1.Nginxの規則性
Nginxでの定期的なマッチング
- 〜と〜*の違い
- 〜一致するコンテンツでは大文字と小文字が区別されます
- 〜*一致するコンテンツを無差別に小文字
- !〜反転
- ^〜ただし、同時に複数の一致が存在するため、最初に^〜の内容と一致させてください。正規表現をチェックしないでください(優先処理)
構文を使用する
ocation構文記述テーブルの
location命令は、ユーザーが要求したURIに従ってさまざまなアプリケーションを実行するために使用されます。
さまざまなURIと特殊文字の組み合わせの
場所の一致順序の説明[= | | * | ^〜] uri { … }
ロケーション | [=、〜、*、^ ] | 嫌い | {…} |
---|---|---|---|
命令 | マッチID | 一致するウェブサイトアドレス | URIの照合後に実行される構成セクション |
2、Nginxリライトケースの実際の戦闘
書き換えコマンドの最後のフラグの説明
旗のシンボル | 説明 |
---|---|
最終 | このルールが一致した後、新しいロケーションURIルールの一致を継続します |
ブレーク | このルールは、マッチングが完了すると終了し、後続のルールとは一致しなくなります。 |
リダイレクト | 302一時リダイレクトに戻ると、リダイレクト後のURLアドレスがブラウザのアドレスバーに表示されます |
パーマネント | 301の永続的なリダイレクトに戻ると、リダイレクト後のURLアドレスがブラウザのアドレスバーに表示されます |
Nginx書き換えのエンタープライズアプリケーションシナリオ
- ユーザーのブラウジングを調整できますURL、より標準的に見えます、開発および製品担当者のニーズに沿って。
- 検索エンジンにウェブサイトのコンテンツとより良いユーザーエクスペリエンスを検索させるために、企業は静的アドレスを装った動的URLアドレスサービスを提供します。
- URLが新しいドメイン名に変更されたら、古いドメイン名にアクセスさせます新しいドメイン名にジャンプしますオン。たとえば、JDで360buy.comにアクセスすると、jd.comにリダイレクトされます。
- による特別な変数、ディレクトリ、クライアント情報などのURL調整。。
NginxベースのWebサービスを構成する
[root@node01 ~]# vim /etc/nginx/conf.d/host.conf
server {
listen 192.168.5.11:80;
server_name news.123.cn;
location / {
root /usr/share/nginx/html/news;
index index.html index.htm;
}
}
[root@node01 ~]# vim /usr/share/nginx/html/news/index.html
news test page...
[root@node01 ~]# systemctl enable --now nginx
[root@node01 ~]# netstat -lnutp | grep 80
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 2219/nginx: master
ブラウザアクセス:http://news.123.cn/
1.エラーページのリダイレクト
[root@node01 ~]# vim /etc/nginx/conf.d/host.conf
server {
listen 192.168.5.11:80;
server_name news.123.cn;
location / {
root /usr/share/nginx/html/news;
index index.html index.htm;
if (!-f $request_filename){
rewrite /.* err.html permanent;
}
}
}
[root@node01 ~]# nginx -s reload
[root@node01 news]# echo 'this page is not exists...' > err.html
[root@node01 news]# ll
total 8
-rw-r--r-- 1 root root 27 Feb 22 22:45 err.html
-rw-r--r-- 1 root root 18 Feb 22 14:23 index.html
テスト:http://news.123.cn/big_date.jpg
2.仮想ディレクトリエイリアスリダイレクト
[root@node01 bbs]# vim /etc/nginx/conf.d/host.conf
server {
listen 192.168.5.11:80;
server_name bbs.123.cn;
location / {
root /usr/share/nginx/html/bbs;
autoindex on;
index index.html index.htm;
rewrite ^/virtual_dir/(.*) /first/secoend/web_age/$1 last;
location /nginx_status {
stub_status on;
access_log off;
}
}
}
[root@node01 bbs]# nginx -s reload
[root@node01 bbs]# cd /usr/share/nginx/html/bbs/
[root@node01 bbs]# mkdir first/secoend/web_age -p
[root@node01 bbs]# echo 'this is virtual dir test page...' > /first/secoend/web_age/virtusl_dir.html
テスト:http://bbs.123.cn/virtual_dir/virtusl_dir.html
3.ドメインリダイレクト
[root@node01 ~]# vim /etc/nginx/conf.d/host.conf
server {
listen 192.168.5.11:80;
server_name bbs.123.cn;
rewrite .* http://mirrors.aliyun.com/;
location / {
root /usr/share/nginx/html/bbs;
index index.html index.htm;
}
}
[root@node01 ~]# nginx -s reload
テスト:
ブラウザへのアクセス:http://bbs.123.cn/
うまくジャンプする
[root@node01 ~]# vim /etc/nginx/conf.d/host.conf
server {
listen 192.168.5.11:80;
server_name bbs.123.cn;
rewrite .* https://blog.csdn.net/XY0918ZWQ;
location / {
root /usr/share/nginx/html/bbs;
index index.html index.htm;
}
}
[root@node01 ~]# nginx -s reload
テスト:
ブラウザアクセス:http://bbs.123.cn/
が正常にジャンプしました