我向 ISS 添加了一个 ASP.NET MVC3 站点(在调试器中运行良好)。在浏览器中查看站点时,除了所有 CSS 和 JS 文件都返回 404 之外,一切似乎都运行良好。
这是 IIS 管理器中的站点:

其他详情:
我正在尝试做一些在我看来很简单的事情,但我一定是愚蠢的或错过了一些非常明显的事情,因为我无法弄清楚。
我想访问在我的服务器上运行的多个 Web 应用程序,每个应用程序都有一个唯一的前缀:
http://mywebserver/app1 -> localhost:9001
http://mywebserver/app2 -> localhost:9002
...
Run Code Online (Sandbox Code Playgroud)
据我了解,我需要将 Nginx 配置为反向代理,所以我这样做了:
server {
listen 80;
server_name mywebserver;
location /app1{
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 $scheme;
proxy_pass http://127.0.0.1:9001/;
}
...
}
Run Code Online (Sandbox Code Playgroud)
此配置允许我访问应用程序的主页http://mywebserver/app1,但未加载静态内容。
当我打开我的浏览器的控制台上,我可以看到它正试图从获得的资源http://mywebserver/static/custom/index.js,而不是像http://mywebserver/app1/static/custom/index.js。
我尝试root在 location 块中添加一个指令来为静态提供服务,但由于静态内容请求是 on/而不是 on ,因此未将其考虑在内/app1。
如何解决这个问题?有什么明显的我遗漏了还是我完全误解了反向代理的概念?
谢谢你。
nginx web-applications reverse-proxy static-content static-files
使用nginx,如何为不同的用户代理提供不同的静态文件?例如,如果当前用户正在使用 iPhone,则应为他们提供服务mobile_index.html,而应为所有其他用户代理提供服务browser_index.html。
找到解决方案:
server {
listen 80;
root /var/www;
set $mobile_request '0';
if ($http_user_agent ~ 'iPhone') {
set $mobile_request '1';
}
location =/ {
if ($mobile_request = '1') {
rewrite ^ /mobile_index.html;
}
if ($mobile_request = '0') {
rewrite ^ /browser_index.html;
}
}
}
Run Code Online (Sandbox Code Playgroud) 我有类似的查询/api/lang?lang=en,我想与 nginx as 一起提供服务/server/i18n-angular/en.json。我怎样才能做到这一点?
我有以下目录结构:
/public/
/server/i18n-angular/en.json
Run Code Online (Sandbox Code Playgroud)
我有以下配置,但 nginx 说此时使用 index 指令是错误的。
server {
root /public
...
location /api/lang {
if ($args ~* "\?lang=(.+)") {
set $language $1;
index ../server/i18n-angular/$language.json;
}
}
}
Run Code Online (Sandbox Code Playgroud)
我应该使用什么指令而不是index?
尝试下载大文件时(不确定大小是否足够,尝试下载 5Gb),连接卡住:
$ wget --verbose http://example.net/large.zip -O /dev/null
--2016-12-14 12:52:38-- http://example.net/large.zip
Resolving example.net (example.net)... 1.2.3.4
Connecting to example.net (example.net)|1.2.3.4|:80... connected.
HTTP request sent, awaiting response...
Run Code Online (Sandbox Code Playgroud)
这将永远持续下去,永远我的意思是至少 10 分钟。
此类文件的 nginx 配置:
location ~* ^.+\.(css|js|ogg|ogv|svg|svgz|eot|otf|woff|mp4|ttf|rss|atom|jpg|jpeg|gif|png|ico|zip|tgz|gz|rar|bz2|doc|xls|exe|ppt|tar|mid|midi|wav|bmp|rtf)$ {
access_log off;
log_not_found off;
expires 7d;
}
Run Code Online (Sandbox Code Playgroud)
小的静态文件(我的意思是小的,例如 50Mb 的)可以很好地提供。
关闭 access_log ;“打开”没有帮助,此请求的日志中没有任何内容。
将文件类型从 zip 更改为另一种类型无济于事。
最奇怪的是,如果我开始下载并在重新启动nginx之后,下载开始就好了。但只有这一个。如果您在服务器重启后开始另一个下载,它不会以同样的方式工作。
我有带有官方 python-2.7 墨盒的可扩展 openshift 在线应用程序。默认情况下,一切都由 mod_wsgi 处理程序提供。如何配置我的应用程序和/或 Apache 以使用 Apache 而不是 python 后端在我的存储库中提供一些静态文件(如图像、css 和 javascript)?
我试图设置一个 Nginx 服务器和一个运行 Django 的 Gunicorn WSGI 服务器。
除了我有权限问题之外,所有设置似乎都可以运行。我已将别名设置为 /media 和 /static 目录来提供静态内容,但是除非文件归 nginx 用户所有,否则会生成 403 错误。
Gunicorn 用户上传的文件显然归该特定用户所有,这会导致问题。我可以将 nginx 用户添加到 Gunicorn 用户组,但是我不想授予 nginx 对这些文件的一揽子权限。
通过 Gunicorn/Wsgi/Django 上传或生成文件但允许 nginx 为它们提供服务而不增加安全问题的建议方法是什么。
提前致谢,
我有一些文件已上传到一个名为/Download但没有扩展名的文件夹中,例如File1我尝试添加/Download/Web.Config具有以下指定的文件
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<system.webServer>
<staticContent>
<mimeMap fileExtension=".*" mimeType="application/octet-stream" />
</staticContent>
</system.webServer>
</configuration>
Run Code Online (Sandbox Code Playgroud)
但是有了这个,我仍然从 IIS 收到这个错误:
HTTP 错误 404.17 - 未找到请求的内容似乎是脚本,静态文件处理程序不会提供该内容。
最可能的原因:请求匹配通配符 mime 映射。请求被映射到静态文件处理程序。如果有不同的先决条件,请求将映射到不同的处理程序。
您可以尝试的方法:如果您想将此内容作为静态文件提供,请添加显式 MIME 映射。
我正在尝试通过 nginx 为节点应用程序提供服务,但首先尝试为可能位于/public文件夹中的静态文件提供服务。我有那么多工作——但是在访问domain.tld/静态文件夹或索引时,我得到 403;directory index of "/var/www/domain.tld/" is forbidden. 所有权限似乎都正确,所以我很困惑。
这是我的服务器块;
server {
server_name domain.tld;
location / {
root /var/www/domain.tld/public;
try_files $uri $uri/ @proxy;
access_log off;
}
location @proxy {
proxy_pass http://127.0.0.1:3000;
}
}
Run Code Online (Sandbox Code Playgroud)
访问任何随机页面(包括假定的子目录)正确代理节点应用程序。但是,对于任何现有静态目录的根 / 和根,则为 403。
有任何想法吗?
我想使用 Apache 将多个目录映射到同一位置,期待与此类似的行为:假设该/static位置由目录/srv/static1和/srv/static2. 然后,如果/static/image.png被要求,我希望 Apache 以该顺序检查文件/srv/static1/image.png和/srv/static2/image.png。返回找到的第一个文件;如果两者都未找到,则发回经典错误 404。
当然,一种解决方案是使用脚本创建一个指向正确位置的符号链接目录并使用该目录,例如在Alias指令中。我想知道是否有更直接的方法不需要我部署额外的机器。
谢谢!
我目前的web项目有以下特点:
但是,我低估了在少量目录中保存大量文件对性能的影响。目前,网站的 URL 直接映射到文件系统上预先生成的目录结构。例如,地址domain.com/categoryA/...映射到webroot/pages/categoryA/...包含大量 HTML 页面的目录,并且随着添加到该目录中的每个附加文件,文件的读取变得越来越慢。
我怎么能解决这个问题?是否有任何网络服务器或服务器端技术专门解决服务大量静态页面的问题?应保留对 SEO 友好的 URL 结构。除此之外,我愿意接受任何建议。
web-server cache web-applications static-content static-files
static-files ×11
nginx ×6
apache-2.2 ×2
asp.net-mvc ×1
cache ×1
django ×1
gunicorn ×1
http ×1
iis ×1
iis-8.5 ×1
python ×1
useragent ×1
web-server ×1