Ⅰ nginx内置变量如何获取完整的请求url
可以利用 $request_uri 来获取原始的带参数的完整的请求url。
Ⅱ 有谁用nginx对post提交参数做过过滤
nginx在接受post请求时,网络断开,临时数据自动删除,等待下一个请求。客户端会提示请求超时,或才网络不可用。
Ⅲ nginx 拦截url是否有resource
会拦截的,只要是resource开头的文件夹名,都会被拦截,并且抛出500异常。
Ⅳ Nginx伪静态 修改url 禁止原url的访问
默认URL_MODEL为0的时候是没有路由判断的,下面是我修改U函数的截图和代码。图中标识哪些地方是我增加的。
整个U函数的完整代码就不贴出来了,只贴出我增加的部分,也就是
if(C('URL_MODEL') == 0){这个区间里面的代码做了修改}else{...}
if(C('DIY_ROUTE')){
//重新获取路由规则里面里面的键
$key = $mole.'/'.$var[$varController].'/'.$var[$varAction];
static $router_ruler = array();
if(empty($router_ruler)){
$router_ruler = include(CONF_PATH.'route.php');
}
$url = '/'.route($router_ruler,$key,$vars,$suffix);
}else{
$url = __APP__.'?'.C('VAR_MODULE')."={$mole}&".http_build_query(array_reverse($var));
if($urlCase){
$url = strtolower($url);
}
if(!empty($vars)) {
$vars = http_build_query($vars);
$url .= '&'.$vars;
}
}
OneThink的URL伪静态优化:[2]URL_MODEL为0
上面的代码中加了一个配置参数就是DIY_ROUTE
ThinkPHP的配置文件在Application\Common\Conf\config.php的末尾增加一个元素
'DIY_ROUTE' => true,
上面还导入一个路由文件route.php,该文件放在\Application\Common\Conf\route.php
路由演示代码如下:
return array(
//一级路由
'home/index/about'=>'about',
//二级路由
'home/article/detail' =>array(
1=>'[id]',
2=>'[id]-[p]'
),
//三级路由
'home/article/category'=>array(
'category'=>array(
'1'=>array(
1=>'note',
2=>'note-[p]',
),
'2'=>array(
1=>'news',
2=>'news-[p]',
),
'3'=>array(
1=>'blog',
2=>'blog-[p]',
),
)
)
);
OneThink的URL伪静态优化:[2]URL_MODEL为0
OneThink的URL伪静态优化:[2]URL_MODEL为0
然后增加了一些函数来配合刚刚修改的U函数
OneThink的URL伪静态优化:[2]URL_MODEL为0
首先是路由函数
function route($router_ruler,$url,$params,$suffix){
//路由规则里全写成小写吧
$router_ruler = array_change_key_case($router_ruler);
$router_key = strtolower(trim(trim($url),'/'));
if(isset($router_ruler[$router_key])){
//一级路由
$real_url = $router_ruler[$router_key];
//由于规定参数格式必须是数组,所以这里只存在是数组和不是数组(为空)的情况
if(is_array($real_url)){
//看其是不是索引数组
if(array_proct(array_map('is_numeric', array_keys($real_url)))==1){
//二级路由
if(is_array($params)){
$real_url = routeMatch($real_url[count($params)],$params);
}
}else{
//三级路由
foreach($params as $k =>$v){
if(array_key_exists($k,$real_url)){
$routeReg = $real_url[$k][$v][count($params)];
unset($params[$k]);
$real_url = routeMatch($routeReg,$params);
}
}
}
}
if($suffix) {
$suffix = $suffix===true?C('URL_HTML_SUFFIX'):$suffix;
if($pos = strpos($suffix, '|')){
$suffix = substr($suffix, 0, $pos);
}
if($suffix && '/' != substr($url,-1)){
$real_url .= '.'.ltrim($suffix,'.');
}
}
}else{
$real_url = urlBuild($url,$params);
}
return $real_url;
}
Ⅳ nginx怎么做特定url的反向代理
同一个域名不能同时分发到两个server把, 除非配置不同Host, 请求根据不同Host头来转发。 或者加一个代理server
server {
listen 80;
host XXX.XXX.com;
location / {
proxy_pass http://127.0.0.1:81;
}
location /app {
proxy_pass http://127.0.0.1:82;
}
}
server {
listen 81;
#...
}
server {
listen 82;
#...
}
Ⅵ nginx如何拦截请求
可以设置拦截一些类型的文件的访问
可以通过配置文件拦截js文件的访问
但默认情况下,不会拦截任何文件的请求
Ⅶ nginx 判断其他url是否能访问
业务和开发同事需要我这边做一条规则,所有访问 ip 为非上海、广州 office 外网 ip,url 为http://test.com/fuck/index.html 的请求都跳转到 http://test.com/index.html 。然后所有在上海和广州 office 的外网 IP 访问http://test.com/fuck/index.html 依然还是 http://test.com/fuck/index.html。这样就可以在生产上做隔离,不影响其他用户的服务。
注:因为目前生产上的 Nginx 没有做 lua 支持,所以就无法通过使用 lua 来实现该需求,也没有安装 geoip ,所以也无法用模块来支持,只能原生的。
Ⅷ 能不能通过 nginx 判断 url 参数,返回不同页面
为什么不用php或者其他解析服务器来判断,要用web服务器,费力不讨好,没有服务解析只有html更简单,直接访问就好。
可以,去看下nginx重写,要自己写重写规则,根据url不同访问文件不同返回数据不同,
关键字“url重写” “伪静态”
Ⅸ nginx 过滤非法请求 有access日志吗
nginx的log日志分为access log 和 error log
其中access log 记录了哪些用户,哪些页面以及用户浏览器、ip和其他的访问信息
error log 则是记录服务器错误日志
错误日志的形式如下:
201.158.69.116 - - [03/Jan/2013:21:17:20 -0600] fwf[-] tip[-] 127.0.0.1:9000 0.007 0.007 MX pythontab.com GET /html/test.html HTTP/1.1 "200" 2426 "http://a.com" "es-ES,es;q=0.8" "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.97 Safari/537.11"
187.171.69.177 - - [03/Jan/2013:21:17:20 -0600] fwf[-] tip[-] 127.0.0.1:9000 0.006 0.006 MX pythontab.com GET /html/test2.html HTTP/1.1 "200" 2426 "http://a.com" "es-ES,es;q=0.8" "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.97 Safari/537.11"
从上面我们可以看出几部分信息:
1.客户端(用户)IP地址。如:上例中的 201.158.69.116
2.访问时间。如:上例中的 [03/Jan/2013:21:17:20 -0600]
3.访问端口。如:上例中的 127.0.0.1:9000
4.响应时间。如:上例中的 0.007
5.请求时间。如:上例中的 0.007
6.用户地理位置代码(国家代码)。如:上例中的 MX(墨西哥)
7.请求的url地址(目标url地址)的host。如:上例中的 pythontab.com
8.请求方式(GET或者POST等)。如:上例中的 GET
9.请求url地址(去除host部分)。如:上例中的 /html/test.html
10.请求状态(状态码,200表示成功,404表示页面不存在,301表示永久重定向等,具体状态码可以在网上找相关文章,不再赘述)。如:上例中的 "200"
11.请求页面大小,默认为B(byte)。如:上例中的 2426
12.来源页面,即从哪个页面转到本页,专业名称叫做“referer”。如:上例中的 "http://a.com"
13.用户浏览器语言。如:上例中的 "es-ES,es;q=0.8"
14.用户浏览器其他信息,浏览器版本、浏览器类型等。如:上例中的 "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.97 Safari/537.11"
其实nginx access日志的格式不是一成不变的,是可以自定义的。
在nginx的nginx.conf配置文件找到:log_format 这里就是日志的格式
看一下和上述日志匹配的log格式设置:
#access日志格式配置,具体参数不再细说,上面都已经说过了,自己对应一下即可
log_format main '$remote_addr - $remote_user [$time_local] '
'fwf[$http_x_forwarded_for] tip[$http_true_client_ip] '
'$upstream_addr $upstream_response_time $request_time '
'$geoip_country_code '
'$http_host $request '
'"$status" $body_bytes_sent "$http_referer" '
'"$http_accept_language" "$http_user_agent" ';
#配置access log日志的存储位置及文件,注意:access.log文件是可以按日期进行分割的,方便查看及处理
access_log /home/serversoft/nginx/log/access.log main;
Ⅹ 如何用nginx 规则来屏蔽某个URL刷量
如果看nginx日志有url来源指向的话,可以用下面的例子:
if ($http_referer ~* "http://xxxxxx.com") { return 444; }
将其放入NGINX配置文件的HTTP段或者SERVER段落内。
当然,这里也有人遇到跟你类似的问题可以看下网页链接