nginx伪静态 如何重定向访问静态文件

nginx 重定向到子路径_Nginx学习_ThinkSAAS
nginx 重定向到子路径
nginx 重定向到子路径
内容来源: 网络
初学者在搭建nginx的时候,往往项目的子目录里也有一个项目,也想通过域名直接访问这个子目录里的项目。
通过访问120.25.150.xxx:8080 直接转发到 这个地址
listen 8080;
server_name 120.25.150.xxx:8080;
location / {
rewrite ^/(.*)$ /ghost/$1
location ~* ^/ghost/.*$ {
proxy_pass http://127.0.0.1:2369;
个人总结未完待续···
感谢您的耐心阅读,如果您发现文章中有一些没表述清楚的,或者是不对的地方,可以给我留言
,当然你有其他类的需求文章,也可以私信我。
原文出处 :
PHP开发框架
开发工具/编程工具
服务器环境
ThinkSAAS商业授权:
ThinkSAAS为用户提供有偿个性定制开发服务
ThinkSAAS将为商业授权用户提供二次开发指导和技术支持
让ThinkSAAS更好,把建议拿来。
开发客服微信试想一下这样一个需求:
在使用nginx反向代理的时候,我们需要缓存从后端服务器拉取的内容,正常情况下,如果所需要的内容就在后端服务器上,那么很容易,使用nginx的
proxy_cache模块就能够实现缓存。但是有一种情况:内容没有在后端服务器上,而是从后端服务器返回了一个重定向地址,重定向到了第三方服务器,
那么这时候nginx缓存下来的内容就是不是我们需要的源内容了,而是一个只包含重定向链接的文件,那么我们如何应对这一情况呢?
X-accel允许在nginx内部重定向到一个从后端服务器返回的地址,这个功能能够取代你在后端服务器处理一些鉴权、登陆或者其他的事情,并且还能够
让nginx处理那些从重定向地址到终端(浏览器)的内容,这样一来,在后端服务器中,你就能够处理更多的其它的请求。这种功能就是我们常常提到的
X-Sendfile。
这一特性不同于标准的nginx模块,因为它不依赖于标准的协议指令而是以一种特殊的方式处理来自于上游服务器的http消息头,我们采用的方法就是在
你发送一个头消息的时候,携带上一个x-accel-redirect属性的uri,当nginx接收到这个消息头的时候,发现具有x-accel-redirect属性,那么将会把它当做 一个正常的请求(类似于浏览器访问nginx)使用后面携带的uri和当前nginx配置文件中的location进行匹配,然后,nginx将会指向和消息头部中uri相匹配的location。
下面为一个配置实例
worker_processes
logs/error.
logs/nginx.
worker_connections
default_type
application/octet-
#keepalive_timeout
keepalive_timeout
proxy_cache_path /home/mpeg/cache/nginx levels=1:2 keys_zone=ts:500m max_size=1g;
#charset koi8-r;
#access_log
logs/host.access.
add_header X-Via $server_
add_header X-Cache $upstream_cache_
location / {
proxy_pass http://192.168.15.159:8999;
proxy_set_header
proxy_cache_valid 200 302 24h;
location ~* ^/internal_redirect/(.*?)/(.*) {
proxy_set_header
proxy_cache_valid 200 302 24h;
# Extract download url from the request
set $download_uri $2;
set $download_host $1;
# Compose download url
set $download_url $download_host/$download_
proxy_pass $download_
error_page
500 502 503 504
location = /50x.html {
}实际环境中一个demo
worker_processes
#error_log
logs/error.
#error_log
logs/error.
logs/error.
logs/nginx.
worker_connections
default_type
application/octet-
log_format
'$remote_addr - $remote_user [$time_local] &$request& '
'$status $body_bytes_sent &$http_referer& '
'&$http_user_agent& &$http_x_forwarded_for&';
access_log
logs/access.
#keepalive_timeout
keepalive_timeout
proxy_cache_path /home/mpeg/cache/nginx levels=1:2 inactive=1h keys_zone=ts:500m max_size=2g;
#charset koi8-r;
#access_log
logs/host.access.
add_header X-Cache $upstream_cache_
#cache for redirect ts:/internal_redirect/http://192.168.15.159:7090/home/mpeg/record_ott/.ts
#cache for redirect vmhls:/internal_redirect/http://192.168.15.159:7090/vmhls?&filename=/home/mpeg/cl/052_800&startoffset=&endoffset=
location ~* ^/internal_redirect/(.*?)/(.*) {
proxy_set_header
proxy_cache_valid 200 302 24h;
# Extract download url from the request
set $download_uri $2;
set $download_host $1;
# Compose download url
set $download_url $download_host/$download_uri?$
proxy_pass $download_
location ~* live {
#no cache for sub m3u8:/live/?&nodename=cl&usercode=192_168_15_111_0078...
#no cache for main m3u8:/live/1.m3u8
location ~* .m3u8 {
proxy_pass http://192.168.15.110:8999;
proxy_set_header
#cache for ts:/live/0078/1.ts?&nodename=cl&usercode=192_168_15_111_0078...
location ~* .ts {
proxy_pass http://192.168.15.110:8999;
proxy_set_header
proxy_cache_valid 200 302 24h;
location ~* vod {
#no cache for sub m3u8:/vod/078_800.m3u8
#no cache for main m3u8:/vod/078.m3u8
location ~* .m3u8 {
proxy_pass http://192.168.15.110:8999;
proxy_set_header
#cache for tss:/vod/052_800&startoffset=0&endoffset=.ts
location ~* .ts {
proxy_pass http://192.168.15.110:8999;
proxy_set_header
proxy_cache_valid 200 302 24h;
#error_page
# redirect server error pages to the static page /50x.html
error_page
500 502 503 504
location = /50x.html {
说明一下:假如在返回给nginx的header消息中有如下设置
X-Accel-Redirect: /internal_redirect/http://192.168.15.110:7090/home/mpeg/cl/1.ts
那么,经过上述匹配,能够得到如下结果:
$1 = http:/
$2 = /192.168.15.110:7090/home/mpeg/cl/1.ts
$download_url = http://192.168.15.110:7090/home/mpeg/cl/1.ts
这是正则表达式匹配的结果。
最后来看一下整个执行流程:
假设客户端(192.168.15.13)、nginx(192.168.15.14:8889)、后端服务器(192.168.15.159:8999)、第三方服务器(192.168.15.160)
数据流应该是这样的
客户端---&nginx---&后端服务器---(重定向第三方服务器,将第三方服务器地址返回给nginx)---&nginx---(nginx识别X-Accel-Redirect并且访问它指向的重定向连接) & & &&| 同时返回给客户端&---- -------------------------- & &nginx下载内容并且缓存到本 & &&-----------------------------------------|
最后关于清理缓存文件,这里没必要使用缓存清理模块,只需要使用一条命令:
find ./ -maxdepth 2 -type f -mmin +100 | xargs -n 1 rm -f
当然,如果proxy cache模块自带的清理缓存文件的功能满足你的要求的话,那你也可使用自带的功能情路缓存
参考资料:伪静态、裸域名跳转、禁止某个文件或目录被访问、禁止爬虫拔取资源配置 -
- ITeye技术网站
博客分类:
裸域名跳转配置:
在server配置中添加:
if ($host != ''){
^/(.*)$ /$1
所有访问该server的主机名不等于指定的(当然包括直接),都会跳转到去。
伪静态配置,由于项目wordpress需要伪静态配置,配置如下:
在需要伪静态的server中添加:
try_files $uri $uri/ /index.php?q=$uri&$
禁止用户访问某个文件或目录使用deny命令
location /doc/ {
location ~ \.(doc|txt)$ {
root /data/www/htdoc/designer/
第一个location配置表示所有doc目录下的访问都应该被禁止。第二个location表示/data/www/htdoc/designer/下面的所有doc |txt文件禁止访问
许多网站都需要添加防止蜘蛛爬虫拔取自己的资源,下面的配置就是防止资源被拔取,假如我们将我们的静态资源放置到/data/www/resource/static/目录下,并且该资源只有局域网的localhost、
几台机器访问,那么我们可以做如下处理:
location ~* ^.+\.(jpg|jpeg|gif|png|swf|rar|zip|css|js)$ {
valid_referers none blocked
localhost *.
*.;#判断主机是否不是localhot 、 、中的一台
if ($invalid_referer) {
rewrite ^/ /leech.
return 412;
access_ #关闭日志记录功能,确保不会被拔取资源,负责你一直看不到日志,也不知道怎么处理
root /data/www/resource/ #定义静态资源的根目录
expires 3d;
域名重定向:
index index.html index.htm index.
/opt/lampp/htdocs/
rewrite ^/ /;
浏览: 128440 次
来自: 深圳
在windows下可以转MP3,然而在linux下转的MP3都 ...
楼主辛苦了, 问下其它音频格式的参数如何获取呀, 如amr,
gif分解成jpg后,图片的色相不对了,偏红,求解
public static String toMPTree(S ...
謝謝 交作業.fccwcom 的BLOG
用户名:fccwcom
文章数:304
评论数:13
访问量:86119
注册日期:
阅读量:5863
阅读量:12276
阅读量:380274
阅读量:1072609
51CTO推荐博文
如果要针对整个网站全部执行HTTP自动转为HTTPS的功能,可以在httpd.conf文件中,增加:RewriteEngine onRewriteCond&& %{HTTPS} !=onRewriteRule&& ^(.*)& https://%{SERVER_NAME}$1 [L,R]如果,仅要求对\secure目录下的内容强制采用HTTPS访问,可以在httpd.conf文件中加入如下语句:&Directory "C:\Program Files\htdocs\secure"&RewriteEngine onRewriteCond&& %{HTTPS} !=onRewriteRule&& ^(.*)& https://%{SERVER_NAME}/secure/$1 [L,R]&/Directory&
了这篇文章
类别:未分类┆阅读(0)┆评论(0)nginx配置301永久重定向 - 为程序员服务
为程序员服务
nginx配置301永久重定向
<在上线时发现google收录了一些本来该是在主域名下的网址,却收录到了域名下了,最好的办法是在nginx配置中将这些地址重定向到主域名。
nginx中可以通过redirect配合正则表达式来配置重定向,如下是域名的重定向配置:
80; ## listen for ipv4; this line is default and implied
[::]:80 default ipv6only= ## listen for ipv6
rewrite ^(/(user|code-snippet)/.*) $1
rewrite ^(/tag/p\d+) $1
#其他和重定向无关的配置省略了
上面配置了两种重定向,一种是以/user或者/code-snippet开头的重定向到下,并将路径通过$1传过去。第二种重定向是符合/tag/p数字的路径也做同样的重定向处理。
通过nginx的301重定向还可以做整站的重定向,这在切换域名时很有用,如下是相关的配置:
假定某网站之前使用的域名是要将此域名下的内容完全重定向到下
rewrite ^(.*) $1
另外有时候还会遇到将A.com域名下的内容全部重定向到带www的域名下,配置也很简单:
rewrite ^/(.*) /$1
您可能的代码
相关聚客文章
荣誉:2078
相关专栏文章

我要回帖

 

随机推荐