登录
注册
写文章
发现
工具
nginx配置url地址重定向&反向代理
_3t3lfz KEKfID
编辑文章
nginx配置url地址重定向&反向代理
asfx站长
2020.07.22 14:55:19
阅读
1851
## 一、重定向 ####地址重定向配置 如果想让域名B跳转域名A(这种情况适合用于域名B为域名A做推广用),可以做如下配置: ##### 第一种配置方法 ``` server { server_name www.new.com; rewrite ^/(.*)$ http://www.old.com/$1 permanent; } ``` ##### 第二种配置方法 ``` server { server_name www.old.com www.new.com; if ($host != 'www.old.com') { rewrite ^/(.*)$ http://www.old.com/$1 permanent; } } ``` ##### 第三种配置方法 ``` server { server_name www.new.com; rewrite ^/(.*)$ http://www.old.com$uri redirect; } ``` ##### 第四种配置方法 ``` server { server_name www.new.com www.old.com; if ($host = 'www.new.com' ) { return http://www.old.com$uri; } # 也可以加上301重定向代码 if ($host = 'www.new.com' ) { return 301 http://www.old.com$uri; } } ``` #### 一级域名强制重定向到www二级域名下 这里顺便提一嘴,几乎所有网站的首页地址都是带www的,这里可能很多人会有个误区,以为www.xxx.com和xxx.com不就是同一个地址吗?其实不是的。我们需要意识到有带www的地址其实是二级域名,类同fanyi.baidu.com,api.xxx.com 如果要让用户在访问你的一级域名时自动跳转www,那就需要做如下配置: ``` server { server_name www.xxx.com xxx.com; # 主站网站域名包括www二级域名和一级域名 if ($host = 'xxx.com') { # 这里把访问一级域名的请求重定向到www二级子域名下面 rewrite ^/(.*)$ http://www.xxx.com/$1 permanent; } } ``` 正则表达式匹配: ~ 为区分大小写匹配 ~* 为不区分大小写匹配 !~和!~*分别为区分大小写不匹配及不区分大小写不匹配 文件及目录匹配: -f和!-f用来判断是否存在文件 -d和!-d用来判断是否存在目录 -e和!-e用来判断是否存在文件或目录 -x和!-x用来判断文件是否可执行 flag标记: last 相当于Apache里的[L]标记,表示完成rewrite break 终止匹配, 不再匹配后面的规则 redirect 返回302临时重定向 地址栏会显示跳转后的地址 permanent 返回301永久重定向 地址栏会显示跳转后的地址 可用的全局变量有,可以用做条件判断: $args, 请求中的参数; $content_length, HTTP请求信息里的"Content-Length"; $content_type, 请求信息里的"Content-Type"; $document_root, 针对当前请求的根路径设置值; $document_uri, 与$uri相同; $host, 请求信息中的"Host",如果请求中没有Host行,则等于设置的服务器名; $limit_rate, 对连接速率的限制; $request_method, 请求的方法,比如"GET"、"POST"等; $remote_addr, 客户端地址; $remote_port, 客户端端口号; $remote_user, 客户端用户名,认证用; $request_filename, 当前请求的文件路径名 $request_body_file $request_uri, 请求的URI,带查询字符串; $query_string, 与$args相同; $scheme, 所用的协议,比如http或者是https,比如rewrite ^(.+)$ $scheme://example.com$1 redirect; $server_protocol, 请求的协议版本,"HTTP/1.0"或"HTTP/1.1"; $server_addr, 服务器地址,如果没有用listen指明服务器地址,使用这个变量将发起一次系统调用以取得地址(造成资源浪费); $server_name, 请求到达的服务器名; $server_port, 请求到达的服务器端口号; $uri, 请求的URI,可能和最初的值有不同,比如经过重定向之类的。 redirect:返回包含 302 代码的临时重定向,在替换字符串不以"http://","https://“或”$scheme"开头时使用。爬虫不更新URI permanent:返回包含 301 代码的永久重定向。爬虫更新URI rewrite:指令只能返回代码 301 或 302。要返回其他代码,需要在 rewrite 指令后面包含 return 指令。regex(正则) replacement flag (rewrite 源地址 目标地址) return:该指令用于结束规则的执行并返回状态码给客户端。 可使用server, location, if 区域; 示例:如果访问的URL以".sh"或".bash"结尾,则返回403状态码 location ~ .*.(sh|bash)?$ { return 403; } ## 二、反向代理 反向代理:是指以代理服务器来接受internet上的连接请求,然后将请求转发给内部网络上的服务器,并将从服务器上得到的结果返回给internet上请求连接的客户端, 此时代理服务器对外就表现为一个服务器。 proxy_pass 可使用字段:location, location中的if字段; 这个指令设置被代理服务器的地址和被映射的URI,地址可以使用主机名或IP加端口号的形式,例如:proxy_pass http://127.0.0.1:8080/url proxy_pass 也可以配合upstream使用 ``` location /asfx { proxy_pass http://127.0.0.1:8080/asfx; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto https; proxy_next_upstream off; proxy_connect_timeout 30; proxy_read_timeout 300; proxy_send_timeout 300; } ``` ... upstream dd { server 127.0.0.1:8081; server 127.0.0.1:8082; } ... proxy_pass http://dd; ...
我的主页
退出