我搜索得很高,仍然无法找到明确的答案.
如何在IIS中配置IIS 7.0 Web应用程序,使ASP.NET运行时将处理所有的请求-包括那些像静态文件*.js,*.gif等等?
我想要做的是如下.
我们有一种SaaSy网站,我们可以为每个客户"品牌化"."品牌"意味着开发自定义母版页并使用一堆*.css和其他图像.
很自然,我正在使用VirtualPathProvider,其运作方式如下:
public override System.Web.Hosting.VirtualFile GetFile(string virtualPath)
{
if(PhysicalFileExists(virtualPath))
{
var virtualFile = base.GetFile(virtualPath);
return virtualFile;
}
if(VirtualFileExists(virtualPath))
{
var brandedVirtualPath = GetBrandedVirtualPath(virtualPath);
var absolutePath = HttpContext.Current.Server.MapPath(brandedVirtualPath);
Trace.WriteLine(string.Format("Serving '{0}' from '{1}'",
brandedVirtualPath, absolutePath), "BrandingAwareVirtualPathProvider");
var virtualFile = new VirtualFile(brandedVirtualPath, absolutePath);
return virtualFile;
}
return null;
}
Run Code Online (Sandbox Code Playgroud)
基本思路如下:我们branding的webapp中有一个文件夹,其中包含每个"品牌"的文件夹,其中"品牌"等于主机名.也就是说,请求http://foo.example.com/应该使用静态文件branding/foo_example_com,而http://bar.example.com/应该使用来自的内容branding/bar_example_com.
现在我想要IIS做的是将所有请求转发到静态文件StaticFileHandler,然后使用整个"基础结构"并提供正确的文件.但是,尽我所能,我无法配置IIS来执行此操作.
我尝试分析我的Web应用程序,报告的一个瓶颈是缺少gzip压缩.我继续在Django中安装gzip中间件并获得了一些提升但是一个新的报告显示它只是gzipping HTML文件,即Django处理的任何内容.有没有办法我可以kludge/hack/force/make中间件gzip我的CSS和我的JS?
有人可以在下面回答我的问题.我对此感到有些失落.
谢谢.
我正在寻找一个简单的配置来提供特定文件夹中的所有文件和目录.
更确切地说,我正在尝试为pinax /static_media/文件夹和/media/文件夹中的所有内容提供服务,因为它具有相同的URL,并且最好自动索引所有内容.
顺便说一句,我已经运行了python manage.py build_media --all所有静态内容<project_name>/site_media/static
我正在使用的当前配置:
server {
listen 80;
server_name QuadraPaper;
access_log /home/gdev/Projects/QuardaPaper/access_log.log;
location ^*/site_media/*$
{
autoindex on;
access_log off;
root /home/gdev/Projects/QuardaPaper/site_media;
}
location /media/ {
autoindex on;
root /home/gdev/Projects/QuardaPaper/media/;
}
Run Code Online (Sandbox Code Playgroud)
例如,来自各个站点的所有不同配置指令确实让我很困惑
如何使用NGINX直接提供所有现有静态文件,但将其余部分代理到后端服务器.
http://coffeecode.net/archives/200-Using-nginx-to-serve-static-content-with-Evergreen.html
https://serverfault.com/q/46315/91723
http://wiki.nginx.org/Pitfalls
http://pinaxproject.com/docs/0.7/media/#ref-media-devel
环境信息:
一些背景优先.我正在使用以下"技巧"来防止不希望的浏览器缓存静态文件(CSS,JS等):
<script src="{{ STATIC_URL }}js/utils.js?version=1302983029"></script>
Run Code Online (Sandbox Code Playgroud)
当版本字符串在后续页面加载时发生更改时,它会使浏览器从服务器重新获取静态文件.(谷歌"css缓存"有关此技巧的文章.)
我希望浏览器获取最新版本的静态文件,但我还希望在文件未更改时允许浏览器缓存.换句话说,当且仅当静态文件已更新时,我希望更改版本字符串.我也想自动生成版本字符串.
为此,我使用静态文件的上次修改时间作为版本字符串.我正在制作一个自定义模板标签来执行此操作:
<script src="{% versioned_static 'js/utils.js' %}"></script>
Run Code Online (Sandbox Code Playgroud)
以下是模板标签的工作原理:
import os.path
from django import template
from django.conf import settings
class VersionedStaticNode(template.Node):
...
def render(self, context):
# With the example above, self.path_string is "js/utils.js"
static_file_path = os.path.join(settings.STATIC_ROOT, self.path_string)
return '%s?version=%s' % (
os.path.join(settings.STATIC_URL, self.path_string),
int(os.path.getmtime(static_file_path))
)
Run Code Online (Sandbox Code Playgroud)
要获取静态文件的上次修改时间,我需要知道它在系统上的文件路径.我通过连接settings.STATIC_ROOT和来自该静态根的文件的相对路径来获取此文件路径.这对于生产服务器来说都很好,因为所有静态文件都是在收集的STATIC_ROOT.
但是,在开发服务器上(使用manage.py runserver命令),不会收集静态文件STATIC_ROOT.那么在开发中运行时如何获取静态文件的文件路径?
(为了澄清我的目的:我要避免的缓存情况是浏览器使用新HTML和旧CSS/JS的不匹配.在生产中,这可能会极大地混淆用户;在开发中,这会让我和其他开发人员混淆,并且我们经常刷新页面/清除浏览器缓存.)
当我运行服务器时,django管理员缺少css.网络控制台说没有加载样式表,因为它的MIME类型"application/x-css"不是"text/css".这是我的settings.py文件
DEBUG = True
TEMPLATE_DEBUG = DEBUG
ADMINS = (
# ('Your Name', 'your_email@example.com'),
)
MANAGERS = ADMINS
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.sqlite3',
'NAME': 'C:/djangorevision/mysite/sqlite3.db', database
'USER': '', # Not used with sqlite3.
'PASSWORD': '', # Not used with sqlite3.
'HOST': '',
'PORT': '',
}
}
ALLOWED_HOSTS = []
TIME_ZONE = 'America/Chicago'
LANGUAGE_CODE = 'en-us'
SITE_ID = 1
# If you set this to False, Django will make some optimizations so as not
# to load the …Run Code Online (Sandbox Code Playgroud) 简短: 对于每个请求创建一个新的OWIN上下文,我希望能够针对某些资源类型或路径(图像,css,js)阻止这种情况.
完全: 在我们的应用程序启动中,我们注册了一个dbcontext创建委托,以便每个请求只创建一次dbcontext.
public virtual void Configuration(IAppBuilder app)
{
app.CreatePerOwinContext(Factory.DbContextCreateDelegate);
}
Run Code Online (Sandbox Code Playgroud)
如果客户端请求样式表,则将创建OWIN上下文,因此还将创建新的dbcontext.我希望能够根本不创建OwinContext,或者至少能够阻止某些请求类型/路径执行某些"on create"回调.
或者,正如我所知,为什么(部分)"禁用"OWIN的方法会导致问题,我想听听最佳做法是什么?如何在不为每个请求创建数据库上下文的情况下提供静态文件?(这里小小的一点是我们的静态文件是使用虚拟路径提供程序提供的嵌入式资源..."普通"静态文件也会出现问题.)
背景:昨天我开始注意到我们的应用程序的某些部分偶尔没有加载.有时它是单个图像,有时是整个CSS文件.经过一些调查后,我看到一些请求抛出了http 500错误,抛出的异常通常是SQL连接超时(但也有其他异常).
虽然我们当然试图修复这些例外.我确实认为,当客户端请求单个图像时,我们的应用程序设置数据库连接完全是胡说八道...这是单个页面请求的大约10个数据库连接???
对我来说就像这样一个明显的问题,但我昨天一直在谷歌搜索,没有找到任何接近解决方案或解决方法.我错过了什么堆栈?
编辑:我只是尝试了一种方法,我没有实际创建dbcontext而是创建存根.事后看来,这显然不是这个问题的解决方案,因为OwinContext试图继续它的进程,并且当它试图使用该存根dbcontext从数据库中获取用户时将严重失败.dbcontext不是问题,我需要完全绕过Owin ......我想......
在我的express应用程序中,我已/public使用此行设置要从目录中提供的静态文件:
app.use(express.static(__dirname + '/public'));
Run Code Online (Sandbox Code Playgroud)
现在,我需要在提供静态内容之前添加用于身份验证的中间件,并且如果用户未经过身份验证,则需要重定向到用于身份验证的路由(例如,/login).
我不确定我该怎么做.有任何想法吗?
我正在关注此文档,但我遇到了困难:https: //docs.microsoft.com/en-us/aspnet/core/fundamentals/static-files
考虑我的目录结构:
wwwroot
dist
index.html
Run Code Online (Sandbox Code Playgroud)
在我的启动课上,我有:
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
app.UseDefaultFiles();
app.UseStaticFiles();
app.UseStaticFiles(new StaticFileOptions
{
FileProvider = new PhysicalFileProvider(Path.Combine(Directory.GetCurrentDirectory(), "wwwroot", "dist"))
});
}
Run Code Online (Sandbox Code Playgroud)
当我启动应用程序时,我没有看到我的index.html页面,但是如果我导航到,我会这样做 <host>/dist/index.html
如何配置它以便ASP.NET自动将我带到该页面<host>?
我有一个包含某些产品的应用程序,每个产品都有一个包含不同数量图像的图库。每个图像的名称都是完全随机的/与其他图像名称无关联。
每个产品图片都在中/src/assets/images/products/:id/。
我需要将路径添加到图库组件,但由于名称是随机的,因此无法遍历它们。有什么方法可以仅使用Angular循环浏览文件夹中的每个文件吗?如果不能,可以在后台重命名文件吗?如果重要的话,我还在Node.js后端上运行该应用程序。
我正在开发在Heroku上运行的Flask应用,该应用允许用户上传图像。该应用程序有一个页面,用于在表格中显示用户的图像。
出于开发目的,我将上传的文件保存到Heroku的临时文件系统中,并且一切正常:图像已正确加载和显示(我使用的是这里显示的最后一种方法,暗示着使用send_from_directory())。现在,我已将存储移至S3,并且正在尝试修改代码。我使用boto3将文件上传到存储桶:工作正常。我的怀疑与下载以用户图像填充用户页面有关。
正如解释在这里,我可以把文件设为“公众阅读的”,并使用URL(我想这是瓶-S3一样),但我宁愿不想离开这些文件的自由访问。因此,我的解决方案尝试是将文件下载到Heroku的文件系统中,并再次使用send_from_directory()来提供图像,如下所示:
app.py
@app.route('/download/<resource>')
def download_image(resource):
""" resource: name of the file to download"""
s3 = boto3.client('s3',
aws_access_key_id=current_app.config['S3_ACCESS_KEY'],
aws_secret_access_key=current_app.config['S3_SECRET_KEY'])
s3.download_file(current_app.config['S3_BUCKET_NAME'],
resource,
os.path.join('tmp',
resource))
return send_from_directory('tmp', # Heroku's filesystem
resource,
as_attachment=False)
Run Code Online (Sandbox Code Playgroud)
然后,在模板中,我生成图像的URL,如下所示:
...
<img src="{{ url_for('app.download_image',
resource=resource) }}" height="120" width="120">
...
Run Code Online (Sandbox Code Playgroud)
它可以工作,但是由于某些原因,我认为这不是正确的方法:其中,我应该管理Heroku的文件系统,以避免耗尽dynos重新启动之间的所有空间(我应该从文件系统中删除图像)。
考虑到性能,哪种是最佳/首选方式?非常感谢
static-files ×10
django ×4
python ×3
c# ×2
node.js ×2
amazon-s3 ×1
angular ×1
asp.net ×1
asp.net-core ×1
boto3 ×1
compression ×1
dbcontext ×1
express ×1
flask ×1
gzip ×1
heroku ×1
iis-7 ×1
javascript ×1
middleware ×1
nginx ×1
owin ×1
pinax ×1
python-2.7 ×1
request ×1
typescript ×1