Ця стаття є дзеркальною статтею машинного перекладу, будь ласка, натисніть тут, щоб перейти до оригінальної статті.

Вид: 11719|Відповідь: 1

[Веб] Приклад ілюструє правило переписування в Nginx

[Копіювати посилання]
Опубліковано 05.12.2014 22:45:25 | | |
Один. Відповідність регулярних виразів, де:
* ~ — це відповідність до регістру
* ~* — це збіг без регістру
* !~ та !~* — це невідповідності відповідно до регістру та невідповідності
Два. Файл і каталог співпадають, де:
* -f і !-f використовуються для визначення існування файлу
* -d та !-d використовуються для визначення, чи існує каталог
* -e та !-e використовуються для визначення, чи існує файл або каталог
* -x та !-x використовуються для визначення, чи є файл виконуваним, чи ні
3. Останнім параметром інструкції перепису є позначка прапора, яка позначається так:
1.last еквівалентна позначці [L] в apache, що означає переписування.
2. Розрив Після завершення відповідності цього правила парування буде припинено, і наступні правила більше не будуть збігатися.
3.redirect повертає тимчасове перенаправлення 302, і адреса браузера відображає URL-адресу після переходу.
4. Постійне повернення 301 Постійне перенаправлення, адреса браузера покаже URL-адресу після переходу.


Використовуйте last і break для реалізації переписування URI, і адресна лінія браузера залишається незмінною. І між ними є невелика різниця: використання команди псевдоніму має бути позначено останнім; При використанні proxy_pass директив потрібно використовувати тег break. Після того, як останній тег буде виконано в цьому правилі переписування, він буде на сервері{......} Тег повторно ініціює запит, а тег break завершує матч після завершення відповідності правил.
Наприклад: якщо ми перенаправимо URL на кшталт /photo/123456 на /path/to/photo/12/1234/123456.png
переписати "/photo/([0-9]{2})([0-9]{2})([0-9]{2})"/path/to/photo/$1/$1$2/$1$2$3.png ;


Чотири. Правило NginxRewrite


1. Розірвати команду
Середовище використання: сервер, місцезнаходження, якщо;
Директива завершує поточний набір правил і більше не обробляє директиву переписування.


2. Якщо це вказівка
Середовище використання: сервер, розташування
Ця інструкція використовується для перевірки виконання умови, і якщо так, виконання оператора всередині завитих скоб. Команда If не підтримує вкладення і не підтримує кілька умов && та || Лікування.


3. Команда повернення
Синтаксис: код повернення;
Середовище використання: сервер, місцезнаходження, якщо;
Ця інструкція використовується для завершення виконання правила та повернення статусного коду клієнту.
Приклад: якщо відвідана URL закінчується на ".sh" або ".bash", повертається статус коду 403
Розташування ~ .*\. (sh|bash)?$
{
повернення 403;
}


4. Команда переписати
Синтаксис: прапорець заміни rewriteregex
Середовище використання: сервер, місцезнаходження, якщо
Ця директива перенаправляє URI на основі виразу або змінює рядок. Інструкції виконуються у порядку у конфігураційному файлі. Зверніть увагу, що переписування виразів дійсне лише для відносних шляхів. Якщо ви хочете поєднати імена хостів, слід використовувати if оператори, наприклад нижче:
якщо( $host ~* www\.(. *) )
{
сет $host_without_www $1;
переписати ^(.*)$ http://$host_without_www$1permanent;
}


5. Встановити команду
Синтаксис: значення setvariable; За замовчуванням: немає; Середовище використання: сервер, місцезнаходження, якщо;
Ця директива використовується для визначення змінної та присвоєння їй значення. Значення змінної може бути текстовим, змінним або об'єднанням текстових змінних.
Приклад: set$varname «hello world»;


6.Uninitialized_variable_warn інструкції
Синтаксис: uninitialized_variable_warnon|off
Середовище використання: http, сервер, місцезнаходження, якщо
Ця команда використовується для вмикання та вимикання попереджувального повідомлення для неініціалізованих змінних, а значення за замовчуванням — Увімкнено.




П’ять. Приклад написання правил Nginx Rewrite
1. Якщо доступний файл і каталог відсутні, перенаправити їх на певний php-файл
if( !-e $request_filename )
{
переписати ^/(.*)$ index.php останнім;
}


2. Обмін каталогами /123456/xxxx ====> /xxxx?id=123456
переписати ^/(\d+)/(.+)/ /$2?id=$1 останнє;


3. Якщо клієнт використовує браузер IE, він перенаправляє на каталог /ie
if( $http_user_agent ~ MSIE)
{
переписати ^(.*)$ /ie/$1 break;
}


4. Вимкніть доступ до кількох каталогів
Розташування ~ ^/(cron|шаблони)/
{
заперечувати все;
перерва;
}


5. Вимкніть доступ до файлів, що починаються на /data
Розташування ~ ^/data
{
заперечувати все;
}


6. Заборонити доступ до файлів із назвами суфіксів .sh, .flv, .mp3
Розташування ~ .*\. (sh|flv|mp3)$
{
повернення 403;
}


7. Встановіть час кешу браузера для певних типів файлів
Розташування ~ .*\. (gif|jpg|jpeg|png|bmp|swf)$
{
термін дії закінчується 30 пенсів;
}
Розташування ~ .*\. (js|css)$
{
закінчується 1 год;
}


8. Встановити терміни придатності для favicon.ico та robots.txt;
Тут favicon.ico становить 99 днів, а robots.txt — 7 днів, і журнал помилок 404 не зареєстрований
Розташування ~(favicon.ico) {
log_not_found геть;
термін дії закінчується 99 пенсів;
перерва;
}
Розташування ~(robots.txt) {
log_not_found геть;
термін дії закінчується 7 пенсів;
перерва;
}


9. Встановити термін дії певного документа; Це 600 секунд, і журнали доступу не записуються
location ^~ /html/scripts/loadhead_1.js {
access_log пішов;
root /opt/lampp/htdocs/web;
термін закінчення 600 років;
перерва;
}


10. Анти-гарячі лінки та встановлені терміни придатності
Return412 — це власний HTTP-код, який за замовчуванням встановлюється на 403, що зручно для пошуку правильного запиту на гаряче посилання
"переписати ^/; "Показує зображення анти-гарячого посилання
"access_log геть;" Журнали доступу не фіксуються, що знижує стрес
"Expires 3D" — 3 дні кешу браузера для всіх файлів


розташування ~*^.+\. (jpg|jpeg|gif|png|swf|rar|zip|css|js)$ {
valid_referers не заблоковано *.xx.com*.xx.net localhost 208.97.167.194;
якщо ($invalid_referer) {
переписати ^/;
Повернення 412;
перерва;
}
access_log пішов;
root /opt/lampp/htdocs/web;
термін дії закінчується 3 пенси;
перерва;
}


11. Дозволяйте фіксований IP-доступ до сайту лише з паролем


root /opt/htdocs/www;
дозволити 208.97.167.194;
дозволити 222.33.1.2;
дозволити 231.152.49.4;
заперечувати все;
auth_basic «C1G_ADMIN»;
auth_basic_user_file htpasswd;


12Конвертуйте файли в багаторівневих каталогах в один файл для покращення SEO-ефектів
/job-123-456-789.html 指向/job/123/456/789.html


rewrite^/job-([0-9]+)-([0-9]+)-([0-9]+)\.html$ /job/$1/$2/jobshow_$3.html last;


13. Перенаправляйте, коли файли та каталоги відсутні:


if (!-e $request_filename) {
proxy_pass http://127.0.0.1;
}


14. Вкажіть папку з кореневого каталогу до каталогу рівня 2
Наприклад, /shanghaijob/ вказує на /район/шанхай/
Якщо змінити останню на постійну, то адресний рядок браузера буде /location/shanghai/
переписати ^/([0-9a-z]+)job/(.*)$ /area/$1/$2last;
Проблема з наведеним вище прикладом у тому, що він не збігається при доступі до /shanghai
переписати ^/([0-9a-z]+)job$ /area/$1/ last;
переписати ^/([0-9a-z]+)job/(.*)$ /area/$1/$2last;
Цей шлях/шанхай також доступний, але відповідні посилання на сторінці недоступні,
Якщо ./list_1.html справжня адреса /area/shanghia/list_1.html стане /list_1.html, що робить її недоступною.
Тоді я не можу додати автоматичний стрибок
(-d $request_filename) має умову, що це має бути справжня директорія, а моє переписування — ні, тому це не має значення
якщо (-d $request_filename){
переписати ^/(.*)([^/])$ http://$host/$1$2/постійно;
}
Це легко зробити, знаючи причину, дозвольте мені стрибати вручну
переписати ^/([0-9a-z]+)job$ /$1job/постійний;
переписати ^/([0-9a-z]+)job/(.*)$ /area/$1/$2last;


15. Стрибок між доменними іменами
Сервер
{
слухати 80;
server_name jump.linuxidc.com;
індекс index.html index.htm index.php;
root /opt/lampp/htdocs/www;
переписати ^/ http://www.xx.com/;
access_log пішов;
}


16. Багатодоменне обертання
server_name www.xx.comwww.xx.com;
індекс index.html index.htm index.php;
root /opt/lampp/htdocs;
if ($host ~ "linuxidc\.net") {
переписати ^(.*) http://www.xx.com$1permanent;
}


6. Глобальні змінні nginx
arg_PARAMETER #这个变量包含GET请求中, якщо існує змінний ПАРАМЕТР.
args #这个变量等于请求行中 (GET request) параметри, наприклад, foo=123&bar=blahblah;
binary_remote_addr #二进制的客户地址.
body_bytes_sent #响应时送出的body字节数数量. Ці дані є точними навіть при перериванні з'єднання.
Поле content_length #请求头中的Content довжини.
Поле типу content_type #请求头中的Content.
cookie_COOKIE #cookie значення змінної COOKIE
document_root #当前请求在root指令中指定的值.
document_uri #与uri相同.
#请求主机头字段 хост, інакше — ім'я сервера.
Hostname #Set на ім'я хоста themachine, яке повертається GetHostname
http_HEADER
is_args #如果有args参数 ця змінна дорівнює "?", інакше дорівнює "", нульовому значенню.
http_user_agent #客户端agent信息
http_cookie #客户端cookie信息
limit_rate #这个变量可以限制连接速率.
query_string #与args相同.
request_body_file #客户端请求主体信息的临时文件名.
request_method #客户端请求的动作, зазвичай GET або POST.
remote_addr #客户端的IP地址.
remote_port #客户端的端口.
remote_user #已经经过Auth Ім'я користувача підтверджено Базовим модулем.
request_completion #如果请求结束, встанови на ОК. Спорожнення, коли запит не завершений або якщо запит не є останнім у ланцюжку запитів.
request_method #GET或POST
request_filename #当前请求的文件路径 генерується кореневими або псевдонімними директивами та URI-запитами.
request_uri #包含请求参数的原始URI, вона не містить ім'я хоста, наприклад, "/foo/bar.php?arg=baz". не можна змінювати.
Scheme #HTTP方法 (наприклад, HTTP, HTTPS).
server_protocol #请求使用的协议, зазвичай HTTP/1.0 або HTTP/1.1.
server_addr #服务器地址, це значення можна визначити після завершення системного виклику.
server_name #服务器名称.
server_port #请求到达服务器的端口号.


Сім. Відповідність між правилами апачів і нгінкс
RewriteCond Apache відповідає Nginx, якщо
RewriteRule Apache відповідає перепису Nginx
[R] Apache відповідає перенаправленню Nginx
[P] в апачській відповідає останньому в Нгінкс
Apache [R,L] відповідає перенаправленню Nginx
[P,L] Apache відповідає останньому у Nginx
Apache [PT,L] відповідає останній у Nginx


Наприклад, дозвольте визначеному доменному імені доступ до цього сайту і завжди звертайтеся до www.xx.com інших доменних імен
  Апачі:
RewriteCond %{HTTP_HOST} !^(.*?) \.aaa\.com$[NC]
RewriteCond %{HTTP_HOST} !^localhost$
RewriteCond %{HTTP_HOST}!^192\.168\.0\. (.*?) $
RewriteRule ^/(.*)$ http://www.xx.com[R,L]


  Nginx:
якщо( $host ~* ^(.*)\.aaa\.com$ )
{
встановлено $allowHost '1';
}
if( $host ~* ^localhost )
{
встановлено $allowHost '1';
}
якщо( $host ~* ^192\.168\.1\.(. *?) $ )
{
встановлено $allowHost '1';
}
якщо( $allowHost !~ '1' )
{
переписати ^/(.*)$ http://www.xx.comredirect ;
}





Попередній:Sina Weibo сканує код, щоб сплатити 1 цент для отримання річного бонусу до 2015 юанів
Наступний:CMD5 зламає пароль системного адміністратора Windows
Опубліковано 07.12.2014 17:25:05 |
Читати і писати у відповідь — це чеснота
Застереження:
Усе програмне забезпечення, програмні матеріали або статті, опубліковані Code Farmer Network, призначені лише для навчання та досліджень; Вищезазначений контент не повинен використовуватися в комерційних чи незаконних цілях, інакше користувачі несуть усі наслідки. Інформація на цьому сайті надходить з Інтернету, і спори щодо авторських прав не мають до цього сайту. Ви повинні повністю видалити вищезазначений контент зі свого комп'ютера протягом 24 годин після завантаження. Якщо вам подобається програма, будь ласка, підтримуйте справжнє програмне забезпечення, купуйте реєстрацію та отримайте кращі справжні послуги. Якщо є будь-яке порушення, будь ласка, зв'яжіться з нами електронною поштою.

Mail To:help@itsvse.com