有没有办法自动缩小静态内容,然后自动从缓存中提供它?类似于有mod_compress/mod_deflate工作吗?优选地,我可以将其与压缩结合使用(因为压缩具有更显着的益处).
我的偏好是适用于lighttpd的东西但是我找不到任何东西,所以任何可以做到这一点的网络服务器都会很有趣.
我正在使用GWT开发一个Web应用程序,app.nocache.js即使Web服务器发送了该文件的新副本,我也看到了在浏览器中缓存文件的疯狂问题!
我正在使用Eclipse来编译应用程序,它在开发模式下工作.为了测试生产模式,我有一台虚拟机(Oracle VirtualBox),在我的主机(Windows 7)上运行Ubuntu客户操作系统.我在VM中运行lighttpd Web服务器.VM正在共享我项目的war目录,并且Web服务器正在为此目录提供服务.
我使用Chrome作为浏览器,但在Firefox中也是如此.
这是场景:
6E89D5C912DD8F3F806083C8AA626B83.cache.html,它不存在(404 not found).app.nocache.js浏览器重新装入从Web服务器(200 OK),因为在服务器上的文件比浏览器缓存更新.我验证了服务器返回的新文件的文件大小和时间戳是正确的.(这是Chrome报告服务器的HTTP响应的信息)但是,如果我打开app.nocache.js浏览器,javascript就是指6E89D5C912DD8F3F806083C8AA626B83.cache.html!也就是说,即使Web服务器发送了新的app.nocache.js,浏览器似乎也忽略了它并继续使用其缓存副本!
转到Google-> Eclipse中的GWT Compile.重新编译整个事情.
app.nocache.js被覆盖并具有新的时间戳.app.nocache.js.6E89D5C912DD8F3F806083C8AA626B83.cache.html并失败.浏览器仍在使用旧的缓存副本app.nocache.js.6E89D5C912DD8F3F806083C8AA626B83.cache.html(通过find和grep)出了什么问题?为什么nocache.js即使服务器向其发送新副本,浏览器也会缓存此文件?
以下是在浏览器中单击重新加载时HTTP请求/响应标头的副本.在此跟踪中,自上次GET以来尚未重新编译服务器内容(但请注意,nocache.js的缓存版本仍然是错误的!):
Request URL:http://192.168.2.4/xbts_ui/xbts_ui.nocache.js
Request Method:GET
Status Code:304 Not Modified
Request Headersview source
Accept:*/*
Accept-Charset:ISO-8859-1,utf-8;q=0.7,*;q=0.3
Accept-Encoding:gzip,deflate,sdch
Accept-Language:en-US,en;q=0.8
Cache-Control:max-age=0
Connection:keep-alive
Host:192.168.2.4
If-Modified-Since:Thu, 25 Oct 2012 17:55:26 GMT
If-None-Match:"2881105249"
Referer:http://192.168.2.4/XBTS_ui.html
User-Agent:Mozilla/5.0 …Run Code Online (Sandbox Code Playgroud) 我正在我的Raspberry Pi上设置一个简单的Web服务器,我似乎无法正确设置lighttpd,fastcgi和flask.
到现在为止,我经历了几次迭代/etc/lighttpd/lighttpd.conf,最近的一次
fastcgi.server = ("/test" =>
"test" => (
"socket" => "/tmp/test-fcgi.sock",
"bin-path" => "/var/www/py/test.fcgi",
"check-local" => "disable"
)
)
Run Code Online (Sandbox Code Playgroud)
那吐了一个错误/etc/init.d/lighttpd start.第一行看起来不对,所以我在胖箭后添加了一组parens:
fastcgi.server = ("/test" => (
...
))
Run Code Online (Sandbox Code Playgroud)
这没有发出错误,但当我尝试连接时,我进入ERR_CONNECTION_REFUSED了Chrome.然后我尝试删除"/test" =>,这有同样的问题.我也试过这个问题中显示的配置,并且发生了同样的问题.
在/var/www/py/test.fgci:
#!/usr/bin/python
from flup.server.fcgi import WSGIServer
from test import app
WSGIServer(app, bindAddress="/tmp/test-fcgi.sock").run()
Run Code Online (Sandbox Code Playgroud)
在/var/www/py/test.py:
from flask import Flask
app = Flask(__name__)
@app.route("/test")
def hello():
return "<h1 style='color:red'>☭ hello, comrade ☭</h1>"
Run Code Online (Sandbox Code Playgroud)
lighttpd.conf当我启动它时,电流失败/etc/init.d/lighttpd …
我正在编写一个iPhone应用程序,当用户与服务器进行交互时,需要向服务器发送一小段信息(每个字符串,每个字符串不超过128个,并且这种情况不会经常发生).我希望这些信息保密,所以我想某种加密或安全连接是必要的.
我的问题是关于服务器端的事情.iPhone应用程序必须与之通信的服务器是用django编写的,并且正在lighttpd上运行.这样做最合适的方式(或标准方式是什么)是什么.我在想https,我知道在iPhone上我可以使用ASIHTTPRequest来做POST请求,但我不知道它在服务器端需要什么.我需要证书吗?数据是如何加密/保护的?有没有任何django模块可以帮助解决这个问题?我是否必须做一些配置lighttpd的事情?
像xml-rpc或json-rpc这样的东西会更简单吗?是否有可能确保此类通信?会出现什么级别?
任何帮助将非常感激.
我正在调查使用Node充当反向代理的可能性.我的项目的主要目标之一是它具有非常高的性能.所以我设置了一个节点服务器来代理对目标节点服务器的请求,无论请求是什么,它都会响应'hello world'.
使用Apache Bench我已经对每秒处理的请求数进行了一些比较.代理,目标和调用者都在AWS中的单独M1 Large实例上.我的结果令人沮丧和困惑.
从呼叫者直接到目标:
ab -c 100 -n 10000 http://target-instance/
Run Code Online (Sandbox Code Playgroud)
= ~2600请求/秒
从呼叫者到代理到目标
ab -c 100 -n 10000 http://proxy-instance/
Run Code Online (Sandbox Code Playgroud)
= ~1100个请求/秒
使用lighttpd我能够在代理和目标上获得~3500请求/秒
我很失望代理服务器的性能低于目标服务器.当比较像lighttpd这样的其他产品时,我看到代理实现了与目标相当的结果,所以我很困惑Node(假设快速闪电)没有达到相同的效果.
这是我在Node v0.5.9中的代理代码:我错过了什么吗?
var server =
http.createServer(function(req, res){
var opts = { host: 'target-instance',
port: 80,
path: '/',
method: 'GET'};
var proxyRequest = http.get(opts, function(response){
response.on('data', function(chunk){
res.write(chunk);
});
response.on('end', function(){
res.end()
});
});
});
server.listen(80);
Run Code Online (Sandbox Code Playgroud) 我有这种情况:
用户来到我的网站并关注链接,不再存在,他应该被重定向到自定义errorpage.(这样可行)
如果用户做某事,那会引发错误,他应该看到Stacktrace和真正的Errorpage.
这是我目前的Web.config:
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<system.web>
<customErrors>
<error statusCode="404" redirect="/errors/404.htm" />
</customErrors>
<compilation debug="true" strict="false" explicit="true" />
</system.web>
</configuration>
Run Code Online (Sandbox Code Playgroud)
使用此配置,404将重定向到正确的站点,但HTTP 500将显示如下:
'/'应用程序中的服务器错误
说明:服务器上发生应用程序错误.此应用程序的当前自定义错误设置可防止远程查看应用程序错误的详细信息(出于安全原因).但是,它可以由运行在本地服务器计算机上的浏览器查看.
详细信息:要在远程计算机上查看此特定错误消息的详细信息,请在位于当前Web应用程序根目录中的"web [.config"配置文件中创建标记.然后,此标记应将其"mode"属性设置为"Off".
[...]
但在这种情况下,我想显示堆栈跟踪.
我怎样才能做到这一点?
注意:我们在Linux上使用Mono < - FastCGI - > Lighttpd构造.
我知道这不是一个直接的编程问题,但stackoverflow上的人似乎能够回答任何问题.
我有一台运行Centos 5.2 64位的服务器.相当强大的双核2服务器,4GB内存.它主要提供静态文件,flash和图片.当我使用lighttpd时,它可以轻松地提供超过80 MB /秒的速度,但是当我使用nginx进行测试时,它会降低到低于20 MB /秒.
我的设置很简单,使用默认的安装文件,我添加了以下内容
user lighttpd;
worker_processes 8;
worker_rlimit_nofile 206011;
#worker_rlimit_nofile 110240;
error_log /var/log/nginx/error.log;
#error_log /var/log/nginx/error.log notice;
#error_log /var/log/nginx/error.log info;
pid /var/run/nginx.pid;
events {
worker_connections 4096;
}
http {
....
keepalive_timeout 2;
....
}
Run Code Online (Sandbox Code Playgroud)
我认为nginx至少应该是那么强大,所以我一定不会做某事.
fprintf是线程安全的吗? glibc手册似乎说它是,但我的应用程序,使用单个调用fprintf()写入文件似乎是混合来自不同进程的部分写入.
编辑:为了澄清,有问题的程序是一个lighttpd插件,服务器正在运行多个工作线程.
查看该文件,一些写入混合在一起.
编辑2:我看到的问题似乎可能是由于lighttpd的"工作线程"实际上是单独的进程: http://redmine.lighttpd.net/wiki/lighttpd/Docs:MultiProcessor
问题
通过在同一个套接字上运行2个或更多进程,您将获得更好的并发性,但是您必须注意一些缺点:
- mod_accesslog可能会创建损坏的访问日志,因为同一个文件打开两次并且未同步.
- mod_status将有n个独立的计数器,每个进程一个.
- mod_rrdtool将失败,因为它收到两次相同的时间戳.
- mod_uploadprogress将不会显示正确的状态.
我有一个在 AWS EC2 实例上运行的 lighttpd 服务器。它可以在端口 80(或任何其他端口,如果我更改 /etc/lighttpd/lighttpd.conf 中的 server.port)上提供服务,没有任何问题。但是,当我在不同的端口(例如 8080)上提供替代文档根目录时,浏览器永远无法连接到服务器。
我的 lighttpd.conf 文件的相关部分:
server.port = 80
##
## Use IPv6?
##
server.use-ipv6 = "disable"
##
## bind to a specific IP
##
#server.bind = "localhost"
##
## Run as a different username/groupname.
## This requires root permissions during startup.
##
server.username = "lighttpd"
server.groupname = "lighttpd"
##
## enable core files.
##
#server.core-files = "disable"
##
## Document root
##
server.document-root = server_root + "/release"
$SERVER["socket"] == ":8080" { …Run Code Online (Sandbox Code Playgroud) 我记得一个非常快速的Linux内核模块,名为"TUX",用于静态文件,以回答IIS优秀的Linux静态文件Web服务性能并解决"C10K问题".现在我一直看到:
...用于"快速静态文件服务".如果您的操作系统具有正确的功能,快速提供静态文件并不困难.从那以后,Windows已经发明了IO完成端口,重叠的I/O等.
Tux是否因为安全隐患而死亡?这是Kqueue/Epoll与Sendfile等功能相结合的实验吗?提供100%静态内容的最佳解决方案是什么 - 比如50张左右的图像包装来模拟"翻书"电影.
我理解这是"服务器相关"的问题,但它也是理论上的.如果它纯粹是静态的,那么CDN真的会变得更好吗?