我不希望任何人能够从互联网上检测到我正在使用 NGINX 甚至 Ubuntu。有一些工具(例如 BuiltWith)可以扫描服务器以检测它们正在使用哪些工具。此外,一些破解工具可能有助于检测。我可以从外部隐藏所有这些信息的最佳/最接近的方法是什么?
对我来说,我运行“killall nginx”并通过“sbin/nginx”启动它,有人有更好的重启脚本吗?
顺便说一句:我从源代码安装 nginx,我没有找到“service nginx”命令或 /etc/init.d/nginx
我第一次使用 Nginx,但我对 Apache 和 Linux 非常熟悉。我正在使用一个现有的项目,当我试图查看 index.php 时,我得到一个 404 文件未找到。
这是 access.log 条目:
2013/06/19 16:23:23 [error] 2216#0: *1 FastCGI sent in stderr: "Primary script unknown" while reading response header from upstream, client: 127.0.0.1, server: localhost, request: "GET /index.php HTTP/1.1", upstream: "fastcgi://127.0.0.1:9000", host: "www.ordercloud.lh"
Run Code Online (Sandbox Code Playgroud)
这是网站可用的文件:
server {
set $host_path "/home/willem/git/console/www";
access_log /www/logs/console-access.log main;
server_name console.ordercloud;
root $host_path/htdocs;
set $yii_bootstrap "index.php";
charset utf-8;
location / {
index index.html $yii_bootstrap;
try_files $uri $uri/ /$yii_bootstrap?$args;
}
location ~ ^/(protected|framework|themes/\w+/views) {
deny all;
}
#avoid …Run Code Online (Sandbox Code Playgroud) 我想做的是:当有人访问http://localhost/route/abc服务器时,服务器的响应与http://localhost:9000/abc
现在我像这样配置我的 Nginx 服务器:
location /route {
proxy_pass http://127.0.0.1:9000;
}
Run Code Online (Sandbox Code Playgroud)
HTTP 请求被9000正确分派到端口,但它接收的路径http://localhost:9000/route/abc不是http://localhost:9000/abc.
有什么建议?
我们正在使用 Nginx 在开发平台上提供静态文件。由于它是一个开发平台,我们希望禁用缓存,以便将每个更改传播到服务器。VHost 的配置非常简单:
server {
server_name static.server.local;
root /var/www/static;
## Default location
location / {
access_log off;
expires 0;
add_header Cache-Control private;
}
}
Run Code Online (Sandbox Code Playgroud)
当我们访问一个 HTML 文件(http://static.server.local/test.html)时,我们没有问题:只要文件没有改变,服务器就会返回一个代码304 Not Modified,并返回一个200 OK响应更改文件时修改的文件。
但是,对于 Javascript 或 CSS 文件,它的行为似乎有所不同。文件更改后,我们会按预期获得200 OK响应,但使用旧文本。
Nginx 中是否有可以解释这种行为的内部缓存机制?或者我们应该添加一些配置?
作为旁注,这是修改文件时 Nginx 返回的标头(似乎是正确的):
Accept-Ranges:bytes
Cache-Control:max-age=0
private
Connection:keep-alive
Content-Length:309
Content-Type:text/css
Date:Fri, 13 May 2011 14:13:13 GMT
Expires:Fri, 13 May 2011 14:13:13 GMT
Last-Modified:Fri, 13 May 2011 14:13:05 GMT
Server:nginx/0.8.54
Run Code Online (Sandbox Code Playgroud)
编辑
在使用expires指令和Cache-Control …
我有几台服务器在同一台机器上运行,有些只使用 http,有些同时使用 http 和 https。在单独的文件中定义了几个服务器块,这些文件包含在主配置文件中。
我已经为 http 设置了一个“默认”服务器,它将为与其他配置文件中的任何其他 server_names 不匹配的请求提供通用的“维护页面”。http 默认服务器按预期工作,它使用 server_name "_" 并且它首先出现在包含列表中(因为我观察到在跨服务器重复 server_names 的情况下,使用第一个出现的)。这很好用。
我希望完全相同的服务器块(仅将“listen 80 default_server”切换为“listen 443 default_server”,而不是服务页面“return 444”),但事实并非如此。相反,看起来新的默认 https 服务器实际上是在获取所有传入的 https 连接并导致它们失败,尽管其他服务器块对传入请求有更合适的 server_names。删除新的默认 https 服务器将导致恢复半正确行为:带有 https 的网站将全部正确加载;但是没有 https 的网站都将被路由到包含文件中的第一个 https 服务器(根据文档,如果没有出现“default_server”,那么出现的第一个服务器块将是“default”)。
所以我的问题是,在 nginx 中为 ssl 连接定义“默认服务器”的正确方法是什么?为什么当我显式设置“default_server”时,它会变得贪婪并获取所有连接,而当我隐式让 nginx 决定“默认服务器”时,它会像我期望的那样工作(将不正确的服务器设置为默认值,而其他真实服务器)行为正确)?
这是我的“默认服务器”。Http 可以在不破坏其他服务器的情况下工作。Https 破坏其他服务器并消耗所有服务器。
server {
listen 443 ssl default_server;
server_name _;
access_log /var/log/nginx/maintenance.access.log;
error_log /var/log/nginx/maintenance.error.log error;
return 444;
}
server {
listen *:80 default_server;
server_name _;
charset utf-8;
access_log /var/log/nginx/maintenance.access.log;
error_log /var/log/nginx/maintenance.error.log error;
root /home/path/to/templates;
location / { …Run Code Online (Sandbox Code Playgroud) Apache 有一个graceful选项,可以在http.conf不重新启动 Apache 的情况下扫描修改。nginx呢?
我查看了 nginx 文档,但它仍然让我感到非常困惑。
如何try_files工作?以下是文档中的内容:
尝试文件
语法:try_files path1 [path2] uri
默认值:无
上下文:服务器,位置
可用性:0.7.27
按顺序检查文件是否存在,并返回找到的第一个文件。尾部斜杠表示目录 - $uri /。如果没有找到文件,则调用到最后一个参数的内部重定向。最后一个参数是回退 URI, 必须存在,否则将引发内部错误。与重写不同,如果回退不是命名位置,则 $args 不会自动保留。如果您需要保留 args,则必须明确这样做:
我不明白它是如何检查路径的,如果我不想出现内部错误但让它恢复路径的其余部分以寻找另一个文件怎么办?
如果我想尝试缓存文件,/path/app/cache/url/index.html如果尝试失败,/path/app/index.php我该怎么写?如果我写:
try_files /path/app/cache/ $uri
include /etc/nginx/fastcgi_params;
fastcgi_pass unix:/var/run/php-fastcgi/php-fastcgi.socket;
fastcgi_param SCRIPT_FILENAME $document_root/index.php;
Run Code Online (Sandbox Code Playgroud)
我有index index.php index.html index.htm;。当我访问/urlname,它会尝试检查/path/app/cache/urlname/index.php然后/path/app/cache/urlname/index.html?如果我们忽略一切之后try_files是否可以try_files检查缓存文件夹?我一直在努力,但失败了。
在本地开发机器上,我有一个 nginx 反向代理,如下所示:
server {
listen 80;
server_name myvirtualhost1.local;
location / {
proxy_pass http://127.0.0.1:8080;
}
server {
listen 80;
server_name myvirtualhost2.local;
location / {
proxy_pass http://127.0.0.1:9090;
}
Run Code Online (Sandbox Code Playgroud)
然而,如果我调试我的应用程序,响应可能会延迟无限长的时间,但在 30 秒后我得到:
504 Gateway Time-out
作为回应。
如何禁用超时并使我的反向代理永远等待响应?而且我喜欢全局设置,这样我就不必为每个代理设置它。
我正在上传一个 26Gb 的文件,但我得到:
413 Request Entity Too Large
我知道,这与 相关client_max_body_size,所以我将此参数设置为30000M。
location /supercap {
root /media/ss/synology_office/server_Seq-Cap/;
index index.html;
proxy_pass http://api/supercap;
}
location /supercap/pipe {
client_max_body_size 30000M;
client_body_buffer_size 200000k;
proxy_pass http://api/supercap/pipe;
client_body_temp_path /media/ss/synology_office/server_Seq-Cap/tmp_nginx;
}
Run Code Online (Sandbox Code Playgroud)
但是当整个文件上传后,我仍然收到这个错误。