1.url 转发
nginx中 $1,$2,$3是什么 如:set $para $1
Nginx中,set $para $1,$1表示路径中正则表达式匹配的第一个参数。
以下是一个示例,用以实验$1,$2。
如:location ~/yxl/(.*)/(.*) {
set $para1 $1
set $para2 $2
content_by_lua_block {
ngx.say(ngx.var.para1)
ngx.say(ngx.var.para2)
}
}
此时,若访问路径为localhost:8080/yxl/qwe/asd时,则浏览器会输出
qwe
asd
alias正则表达式
location ~ /mytest/(.*) {
alias /usr/local/nginx/html/$1;
}
2.配置403错误页
error_page 403 http://www.hk515.com/403.html;
3.nginx做非80端口转发
server {
listen 80;
server_name localhost;
location / {
proxy_pass http://147.16.24.175:9500 ;
proxy_set_header Host $host:80;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Via "nginx";
}
}
但是如果nginx的监听端口不是默认的80端口,改为其他端口如81端口。
后端服务器中request.getServerPort()无法获得正确的端口,返回的仍然是80;
在response.sendRedirect()时,客户端可能无法获得正确的重定向url。
正确的配置方法为
在 $host之后加上端口号,如$host:83
server {
listen 83;
server_name localhost;
location / {
proxy_pass http://147.16.24.175:9500 ;
proxy_set_header Host $host:83;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Via "nginx";
}
}
4.is_matched
location /reportDetail {
set $is_matched 0;
if ( $args ~* ^aid=646$ ){
set $is_matched 1;
}
if ($is_matched = 0) {
set $args "aid=646";
rewrite ^/(.*) /reportDetail redirect;
break;
}
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-NginX-Proxy true;
proxy_pass http://idata;
}
5.Nginx下301重定向域名
在网站建设中需要网页重定向的情况很多:如网页目录结构变动,网页重命名、网页的扩展名改变、网站域名改变等
第一种情况:访问a站定向到b站
server {
server_name www.a.com ;
rewrite ^(.*) http://www.b.com/$1 permanent;
}
第二种情况:不是访问a站的全部重定向到指定页面
server {
server_name www.a.com;
if ($host != ‘a.com' )
{
rewrite ^/(.*)$ http://www.b.com/$1 permanent;
}
}
第三种带WWW或者不带WWW之间的跳转
server
{
server_name c.net
rewrite ^/(.*)$ http://www.c.net/$1 permanent;
}
server
{
listen 80;
server_name www.c.com c.com;
if ($host != ‘www.c.com' ) {
rewrite ^/(.*)$ http://www.c.com/$1 permanent;
}
这样就是用户直接访问c.com直接跳转的www.c.com。即让不带www的域名跳转到带www的域名
6.nginx rewrite 实现二级域名跳转
当访问http://abc.jbxue.com跳转到http://www.jbxue.com/test/abc/
方法一:
这种方法浏览器地址会变www.jbxue.com/test/abc
实现访问如下:
server {
listen 80;
server_name www.jbxue.com;
location / {
root /data/test;
index index.html;
}
}
server {
listen 80;
server_name *.jbxue.com;
if ( $http_host ~* "^(.*)\.jbxue\.com#34;) {
set $domain $1;
rewrite ^(.*) http://www.jbxue.com/test/$domain/ break;
}
}
方法二、
当访问http://abc.jbxue.com跳转到http://www.jbxue.com/test/abc/
server {
listen 80;
server_name *.jbxue.com;
root /usr/local/www;
#这是里可以加多个目录,如果不加目录,会无法访问到abc.jbxue.com/目录下的文件,如图片目录/images
location ~ ^/(jbxue|images|styles)/
{
proxy_redirect off;
proxy_set_header Host www.jbxue.com;
proxy_pass http://192.168.1.2:8080;
}
location / {
set $domain default;
if ( $http_host ~* "^(.*)\.jbxue\.com#34;) {
set $domain $1;
}
rewrite ^/(.*) /test/$domain/$1 last;
}
access_log off;
}
7.$http_name
匹配任意请求头字段; 变量名中的后半部分“name”可以替换成任意请求头字段,如在配置文件中需要获取http请求头:“Accept-Language”,那么将“-”替换为下划线,大写字母替换为小写,形如:$http_accept_language即可。
1.根据 请求头信息判断转向(nginx配置)
a.请求内容大于20的
location / {
if ( $content_length > 20 )
{
proxy_pass http://backend_a;
}
}
b.如果请求类型为 User
RequestType: User
location / {
if ( $http_requesttype = "User" )
{
proxy_pass http://backend_a;
}
}
8.拒绝访问
server {
listen 80;
server_name kxcdr.dl.gxpan.cn;
root /data1/kxcdr/;
index index.php index.html index.htm;
access_log /data/log/nginx/kxcdr/kxcdr.dl.gxpan.cn.access.log;
error_log /data/log/nginx/kxcdr/kxcdr.dl.gxpan.cn.error.log;
# error_page 404 /index.html;
# error_page 500 502 503 504 /index.html;
location / {
if (!-f $request_filename){
rewrite ^.*$ /index.php last;
}
}
}
当访问无匹配文件时,跳转到 /index.php,文件不存在,即出现 500错误
last 301错误
9.#nginx 日志切割 logroate
a.宿主机部署
apt-get update
apt-get install -y logrotate
b./etc/logrotate.d/nginx
c.手动执行测试
logrotate -f /etc/logrotate.d/nginx
d.重载nginx
docker exec nginx nginx -s reload
本文暂时没有评论,来添加一个吧(●'◡'●)