Home Backend Development PHP Tutorial Instructions for writing nginx location and rewrite

Instructions for writing nginx location and rewrite

Jul 30, 2016 pm 01:31 PM
break http location nbsp rewrite

location regular writingAn example: location = / { # 精确匹配 / ,主机名后面不能带任何字符串 [ configuration A ] } location / { # 因为所有的地址都以 / 开头,所以这条规则将匹配到所有请求# 但是正则和最长字符串会优先匹配 [ configuration B ] } location /documents/ { # 匹配任何以 /documents/ 开头的地址,匹配符合以后,还要继续往下搜索# 只有后面的正则表达式没有匹配到时,这一条才会采用这一条 [ configuration C ] } location ~ /documents/Abc { # 匹配任何以 /documents/ 开头的地址,匹配符合以后,还要继续往下搜索# 只有后面的正则表达式没有匹配到时,这一条才会采用这一条 [ configuration CC ] } location ^~ /images/ { # 匹配任何以 /images/ 开头的地址,匹配符合以后,停止往下搜索正则,采用这一条。 [ configuration D ] } location ~* \.(gif|jpg|jpeg)$ { # 匹配所有以 gif,jpg或jpeg 结尾的请求# 然而,所有请求 /images/ 下的图片会被 config D 处理,因为 ^~ 到达不了这一条正则 [ configuration E ] } location /images/ { # 字符匹配到 /images/,继续往下,会发现 ^~ 存在 [ configuration F ] } location /images/abc { # 最长字符匹配到 /images/abc,继续往下,会发现 ^~ 存在# F与G的放置顺序是没有关系的 [ configuration G ] } location ~ /images/abc/ { # 只有去掉 config D 才有效:先最长匹配 config G 开头的地址,继续往下搜索,匹配到这一条正则,采用 [ configuration H ] } location ~* /js/.*/\.js
  • starts with = to indicate an exact match
    For example, A only matches requests at the end of the root directory, and cannot be followed by any string. The beginning of
  • ^~ means that the uri starts with a regular string, not a regular match. The beginning of
  • ~ means a case-sensitive regular match; the beginning of
  • ~* means a case-insensitive regular match.
  • / universal matching , if there is no other match, any request will match the
  • order no priority:
    (location =) > (location full path) > (location ^~ path) > (location ~,~* regular order) > (starting path of location part) > (/)The above matching result
    According to the above location writing method, the following matching example is established:
  • / -> config A
    Exact and complete match, even if /index .html can’t be matched either
  • /downloads/download.html -> config B
    After matching B, there is no match going on. Use B
  • /images/1.gif -> configuration D
    matching F, going Match down to D, stop going down
  • /images/abc/def -> config D
    The longest match is up to G, match down to D, stop going down
    You can see that anything starting with /images/ will match Go to D and stop. It makes no sense to write FG here. H will never be turned. This is just to illustrate the matching order
  • /documents/document.html -> config C
    matches C, and nothing below. For any match, use C
  • /documents/1.jpg -> configuration E
    to match C, and go down to regular match to E
  • /documents/Abc.jpg -> config CC
    The longest match is to C, go down The regular sequence matches to CC, not to E
  • Actual usage suggestions所以实际使用中,个人觉得至少有三个匹配规则定义,如下: #直接匹配网站根,通过域名访问网站首页比较频繁,使用这个会加速处理,官网如是说。#这里是直接转发给后端应用服务器了,也可以是一个静态首页# 第一个必选规则 location = / { proxy_pass http://tomcat:8080/index } # 第二个必选规则是处理静态文件请求,这是nginx作为http服务器的强项# 有两种配置模式,目录匹配或后缀匹配,任选其一或搭配使用 location ^~ /static/ { root /webroot/static/; } location ~* \.(gif|jpg|jpeg|png|css|js|ico)$ { root /webroot/res/; } #第三个规则就是通用规则,用来转发动态请求到后端应用服务器#非静态文件请求就默认是动态请求,自己根据实际把握#毕竟目前的一些框架的流行,带.php,.jsp后缀的情况很少了 location / { proxy_pass http://tomcat:8080/ } http://tengine.taobao.org/book/chapter_02.html
    http://nginx.org/en/docs/ http/ngx_http_rewrite_module.htmlRewrite rulesThe rewrite function is to use the global variables provided by nginx or the variables set by yourself, combined with regular expressions and flags to implement url rewriting and redirection. rewrite can only be placed in server{}, location{}, if{}, and can only work on the string after the domain name except for the passed parameters, such as http://seanlook.com/a/we/ index.php?id=1&u=str Only rewrites /a/we/index.php. Syntaxrewrite regex replacement [flag];If relative domain names or parameter strings work, you can use global variable matching, or you can use proxy_pass reverse proxy. It shows that the functions of rewrite and location are somewhat similar, both can achieve jumps. The main difference is that rewrite changes the path to obtain resources within the same domain name, while location controls access or reverse proxy to a type of path. You can proxy_pass to other machines. In many cases, rewrite will also be written in location, and their execution order is:
  • Execute the rewrite instruction of the server block
  • Execute location matching
  • Execute the rewrite instruction in the selected location
  • If the URI in one of the steps is rewritten, re-loop and execute 1-3 until the real file is found ;If the loop exceeds 10 times, a 500 Internal Server Error will be returned. flag flag
  • last : Equivalent to Apache’s [L] flag, indicating completion of rewrite
  • break : Stop executing the subsequent rewrite instruction set of the current virtual host
  • redirect : Return 302 temporary reset Orientation, the address bar will display the address after the jump
  • permanent: Return to 301 permanent redirection, the address bar will display the address after the jump
  • Because 301 and 302 cannot simply return status codes, they must also have Redirected URL, this is why the return command cannot return 301,302. The difference between last and break here is a bit difficult to understand:
  • last is generally written in server and if, while break is generally used in location
  • last does not terminate After rewriting, the URL matches, that is, the new URL will be retrieved from the server Go through the matching process, and break terminates the rewritten matching
  • break and last can organize the continued execution of the subsequent rewrite instructions
  • if instructions and global variables if judgment instructions
    The syntax is if (condition) {...}, judge the given condition. If true, the rewrite instruction within the curly braces will be executed, and the if condition (condition) can be anything as follows:
  • 当表达式只是一个变量时,如果值为空或任何以0开头的字符串都会当做false
  • 直接比较变量和内容时,使用=或!=
  • ~正则表达式匹配,~*不区分大小写的匹配,!~区分大小写的不匹配
  • -f和!-f用来判断是否存在文件
    -d和!-d用来判断是否存在目录
    -e和!-e用来判断是否存在文件或目录
    -x和!-x用来判断文件是否可执行例如:if ($http_user_agent ~ MSIE) { rewrite ^(.*)$ /msie/$1break; } //如果UA包含"MSIE",rewrite请求到/msid/目录下 if ($http_cookie ~* "id=([^;]+)(?:;|$)") { set$id$1; } //如果cookie匹配正则,设置变量$id等于正则引用部分 if ($request_method = POST) { return405; } //如果提交方法为POST,则返回状态405(Method not allowed)。return不能返回301,302if ($slow) { limit_rate 10k; } //限速,$slow可以通过 set 指令设置 if (!-f$request_filename){ break; proxy_pass http://127.0.0.1; } //如果请求的文件名不存在,则反向代理到localhost 。这里的break也是停止rewrite检查 if ($args ~ post=140){ rewrite ^ http://example.com/ permanent; } //如果query string中包含"post=140",永久重定向到example.com location ~* \.(gif|jpg|png|swf|flv)$ { valid_referers none blocked www.jefflei.com www.leizhenfang.com; if ($invalid_referer) { return404; } //防盗链 } 全局变量
    下面是可以用作if判断的全局变量
  • $args: #This variable is equal to the parameters in the request line, the same as $query_string
  • $content_length: Content-length field in the request header.
  • $content_type: Content-Type field in the request header.
  • $document_root: The value specified in the root directive for the current request.
  • $host : Request host header field, otherwise the server name.
  • $http_user_agent: Client agent information
  • $http_cookie: Client cookie information
  • $limit_rate: This variable can limit the connection rate.
  • $request_method: The action requested by the client, usually GET or POST.
  • $remote_addr: The IP address of the client.
  • $remote_port: The port of the client.
  • $remote_user: Username that has been verified by Auth Basic Module.
  • $request_filename: The file path of the current request, generated by the root or alias directive and URI request.
  • $scheme : HTTP method (such as http, https).
  • $server_protocol: The protocol used by the request, usually HTTP/1.0 or HTTP/1.1.
  • $server_addr: Server address, this value can be determined after completing a system call.
  • $server_name: Server name.
  • $server_port: The port number where the request reaches the server.
  • $request_uri: The original URI containing the request parameters, excluding the host name, such as: "/foo/bar.php?arg=baz".
  • $uri: The current URI without request parameters, $uri does not contain the host name, such as "/foo/bar.html".
  • $document_uri : Same as $uri.
  • Example: http://localhost:88/test1/test2/test.php
    $host:localhost
    $server_port:88
    $request_uri:http://localhost:88/test1/test2/test. php
    $document_uri:/test1/test2/test.php
    $document_root:/var/www/html
    $request_filename:/var/www/html/test1/test2/test.phpCommonly used regular rules
  • . : Matches any character except line breaks
  • ? : Repeated 0 or 1 times
  • + : Repeated 1 or more times
  • * : Repeated 0 or more times
  • d : Match numbers
  • ^ : Match the beginning of the string
  • $ : Match the introduction of the string
  • {n} : Repeat n times
  • {n,} : Repeat n Times or more
  • [c]: Matches a single character c
  • [a-z]: Matches any one of a-z lowercase letters
  • The matching content between parentheses () can be followed Referenced by $1, $2 represents the content in the second (). What is easily confusing in regular expressions is escaping special characters. rewrite exampleExample 1:http { # 定义image日志格式log_format imagelog '[$time_local] '$image_file' '$image_type' '$body_bytes_sent' '$status; # 开启重写日志rewrite_logon; server { root /home/www; location / { # 重写规则信息error_log logs/rewrite.log notice; # 注意这里要用‘’单引号引起来,避免{}rewrite'^/images/([a-z]{2})/([a-z0-9]{5})/(.*)\.(png|jpg|gif)$' /data?file=$3.$4; # 注意不能在上面这条规则后面加上“last”参数,否则下面的set指令不会执行set$image_file$3; set$image_type$4; } location /data { # 指定针对图片的日志格式,来分析图片类型和大小access_log logs/images.log mian; root /data/images; # 应用前面定义的变量。判断首先文件在不在,不在再判断目录在不在,如果还不在就跳转到最后一个url里try_files /$arg_file /image404.html; } location = /image404.html { # 图片不存在返回特定的信息return404"image not found\n"; } } 对形如/images/ef/uh7b3/test.png的请求,重写到/data?file=test.png,于是匹配到location /data,先看/data/images/test.png文件存不存在,如果存在则正常响应,如果不存在则重写tryfiles到新的image404 location,直接返回404状态码。例2rewrite ^/images/(.*)_(\d+)x(\d+)\.(png|jpg|gif)$ /resizer/$1.$4?width=$2&height=$3? last; 对形如/images/bla_500x400.jpg的文件请求,重写到/resizer/bla.jpg?width=500&height=400地址,并会继续尝试匹配location。例3
    见 http://seanlook.com/2015/05/28/nginx-ssl ;

    以上就介绍了nginx location及rewrite的写法说明,包括了方面的内容,希望对PHP教程有兴趣的朋友有所帮助。

    Statement of this Website
    The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn

    Hot AI Tools

    Undresser.AI Undress

    Undresser.AI Undress

    AI-powered app for creating realistic nude photos

    AI Clothes Remover

    AI Clothes Remover

    Online AI tool for removing clothes from photos.

    Undress AI Tool

    Undress AI Tool

    Undress images for free

    Clothoff.io

    Clothoff.io

    AI clothes remover

    Video Face Swap

    Video Face Swap

    Swap faces in any video effortlessly with our completely free AI face swap tool!

    Hot Tools

    Notepad++7.3.1

    Notepad++7.3.1

    Easy-to-use and free code editor

    SublimeText3 Chinese version

    SublimeText3 Chinese version

    Chinese version, very easy to use

    Zend Studio 13.0.1

    Zend Studio 13.0.1

    Powerful PHP integrated development environment

    Dreamweaver CS6

    Dreamweaver CS6

    Visual web development tools

    SublimeText3 Mac version

    SublimeText3 Mac version

    God-level code editing software (SublimeText3)

    Hot Topics

    Java Tutorial
    1655
    14
    PHP Tutorial
    1253
    29
    C# Tutorial
    1227
    24
    Solution: Your organization requires you to change your PIN Solution: Your organization requires you to change your PIN Oct 04, 2023 pm 05:45 PM

    The message "Your organization has asked you to change your PIN" will appear on the login screen. This happens when the PIN expiration limit is reached on a computer using organization-based account settings, where they have control over personal devices. However, if you set up Windows using a personal account, the error message should ideally not appear. Although this is not always the case. Most users who encounter errors report using their personal accounts. Why does my organization ask me to change my PIN on Windows 11? It's possible that your account is associated with an organization, and your primary approach should be to verify this. Contacting your domain administrator can help! Additionally, misconfigured local policy settings or incorrect registry keys can cause errors. Right now

    How to adjust window border settings on Windows 11: Change color and size How to adjust window border settings on Windows 11: Change color and size Sep 22, 2023 am 11:37 AM

    Windows 11 brings fresh and elegant design to the forefront; the modern interface allows you to personalize and change the finest details, such as window borders. In this guide, we'll discuss step-by-step instructions to help you create an environment that reflects your style in the Windows operating system. How to change window border settings? Press + to open the Settings app. WindowsI go to Personalization and click Color Settings. Color Change Window Borders Settings Window 11" Width="643" Height="500" > Find the Show accent color on title bar and window borders option, and toggle the switch next to it. To display accent colors on the Start menu and taskbar To display the theme color on the Start menu and taskbar, turn on Show theme on the Start menu and taskbar

    Display scaling guide on Windows 11 Display scaling guide on Windows 11 Sep 19, 2023 pm 06:45 PM

    We all have different preferences when it comes to display scaling on Windows 11. Some people like big icons, some like small icons. However, we all agree that having the right scaling is important. Poor font scaling or over-scaling of images can be a real productivity killer when working, so you need to know how to customize it to get the most out of your system's capabilities. Advantages of Custom Zoom: This is a useful feature for people who have difficulty reading text on the screen. It helps you see more on the screen at one time. You can create custom extension profiles that apply only to certain monitors and applications. Can help improve the performance of low-end hardware. It gives you more control over what's on your screen. How to use Windows 11

    10 Ways to Adjust Brightness on Windows 11 10 Ways to Adjust Brightness on Windows 11 Dec 18, 2023 pm 02:21 PM

    Screen brightness is an integral part of using modern computing devices, especially when you look at the screen for long periods of time. It helps you reduce eye strain, improve legibility, and view content easily and efficiently. However, depending on your settings, it can sometimes be difficult to manage brightness, especially on Windows 11 with the new UI changes. If you're having trouble adjusting brightness, here are all the ways to manage brightness on Windows 11. How to Change Brightness on Windows 11 [10 Ways Explained] Single monitor users can use the following methods to adjust brightness on Windows 11. This includes desktop systems using a single monitor as well as laptops. let's start. Method 1: Use the Action Center The Action Center is accessible

    What does http status code 520 mean? What does http status code 520 mean? Oct 13, 2023 pm 03:11 PM

    HTTP status code 520 means that the server encountered an unknown error while processing the request and cannot provide more specific information. Used to indicate that an unknown error occurred when the server was processing the request, which may be caused by server configuration problems, network problems, or other unknown reasons. This is usually caused by server configuration issues, network issues, server overload, or coding errors. If you encounter a status code 520 error, it is best to contact the website administrator or technical support team for more information and assistance.

    How to turn off private browsing authentication for iPhone in Safari? How to turn off private browsing authentication for iPhone in Safari? Nov 29, 2023 pm 11:21 PM

    In iOS 17, Apple introduced several new privacy and security features to its mobile operating system, one of which is the ability to require two-step authentication for private browsing tabs in Safari. Here's how it works and how to turn it off. On an iPhone or iPad running iOS 17 or iPadOS 17, Apple's browser now requires Face ID/Touch ID authentication or a passcode if you have any Private Browsing tab open in Safari and then exit the session or app to access them again. In other words, if someone gets their hands on your iPhone or iPad while it's unlocked, they still won't be able to view your privacy without knowing your passcode

    Win10/11 digital activation script MAS version 2.2 re-supports digital activation Win10/11 digital activation script MAS version 2.2 re-supports digital activation Oct 16, 2023 am 08:13 AM

    The famous activation script MAS2.2 version supports digital activation again. The method originated from @asdcorp and the team. The MAS author calls it HWID2. Download gatherosstate.exe (not original, modified) from https://github.com/massgravel/Microsoft-Activation-Scripts, run it with parameters, and generate GenuineTicket.xml. First take a look at the original method: gatherosstate.exePfn=xxxxxxx;DownlevelGenuineState=1 and then compare with the latest method: gatheros

    How to Hide and Unhide Folders on Windows 11 [3 Ways] How to Hide and Unhide Folders on Windows 11 [3 Ways] Sep 23, 2023 am 08:37 AM

    Hiding folders is a great way to keep your desktop organized. Maybe you want to keep your personal files or some client details away from prying eyes. Whatever it is, the ability to put them away and unhide them when necessary is a big saver. In short, these hidden files will not show up in the main menu, but they will still be accessible. It's very simple and shouldn't take you too much time. How to hide a folder in Windows 11? 1. Use File Explorer and hit the + key to open File Explorer. WindowsE Find the folder you want to hide, right-click it and select Properties. Navigate to the General tab, check the Hide box, click Apply, and then click OK. In the next dialog box, check Apply changes to this folder, sub-folder

    See all articles