我想要一些适用于 ubuntu 的工具,可以用来测试我的服务器,它可以处理多少。
有什么建议?我以前使用过 apache 基准测试,但我想尝试其他方法。
(作为一个附带问题,如果我只使用 nginx,apache 基准测试是否有效?)
我刚刚在我的服务器上安装了 Nginx 并且对结果非常满意,但是我仍然不知道如何插入通配符虚拟主机。
这是我想要的 [目录] 结构:
-- public_html (example.com)
---subdoamin 1 (x.example.com)
---subdomain 2 (y.example.com)
Run Code Online (Sandbox Code Playgroud)
正如您所看到的,这是非常基本的,但是,我希望能够通过简单地为新子域添加 A 记录来添加域,该记录将立即指向 public_html 下的同名子目录。
网上有很多东西,但我还没有遇到过完全这样的东西。
任何帮助将不胜感激。
我的问题是主题。我有一个域,这是它的 nginx 配置:
server {
listen 80;
server_name connect3.domain.ru www.connect3.domain.ru;
access_log /var/log/nginx/connect3.domain.ru.access.log;
error_log /var/log/nginx/connect3.domain.ru.error.log;
root /home/httpd/vhosts/html;
index index.html index.htm index.php;
location ~* \.(avi|bin|bmp|css|dmg|doc|docx|dpkg|exe|flv|gif|htm|html|ico|ics|img|jpeg|jpg|js|m2a|m2v|mov|mp3|mp4|mpeg|mpg|msi|pdf|pkg|png|pps|ppt|pptx|ps|rar|rss|rtf|swf|tif|tiff|txt|wmv|xhtml|xls|xml|zip)$ {
root /home/httpd/vhosts/html;
access_log off;
expires 1d;
}
location ~ /\.(git|ht|svn) {
deny all;
}
location / {
#rewrite ^ http://connect2.domain.ru/;
proxy_pass http://127.0.0.1:8080/;
proxy_redirect off;
proxy_hide_header "Cache-Control";
add_header Cache-Control "no-store, no-cache, must-revalidate, post-check=0, pre-check=0";
proxy_hide_header "Pragma";
add_header Pragma "no-cache";
expires -1;
add_header Last-Modified $sent_http_Expires;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
Run Code Online (Sandbox Code Playgroud)
我需要将connect3.domain.ru 主机代理到connect2.domain.ru,但浏览器地址栏中的URL …
我正在运行一个 nginx 服务器,它充当上游 unix 套接字的代理,如下所示:
upstream app_server {
server unix:/tmp/app.sock fail_timeout=0;
}
server {
listen ###.###.###.###;
server_name whatever.server;
root /web/root;
try_files $uri @app;
location @app {
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header Host $http_host;
proxy_redirect off;
proxy_pass http://app_server;
}
}
Run Code Online (Sandbox Code Playgroud)
一些应用服务器进程反过来在请求/tmp/app.sock可用时将其拉出。此处使用的特定应用服务器是 Unicorn,但我认为这与此问题无关。
问题是,似乎超过一定量的负载后,nginx 无法以足够快的速度通过套接字获取请求。我设置了多少个应用服务器进程并不重要。
我在 nginx 错误日志中收到了大量这些消息:
connect() to unix:/tmp/app.sock failed (11: Resource temporarily unavailable) while connecting to upstream
Run Code Online (Sandbox Code Playgroud)
许多请求会导致状态代码 502,以及那些不需要很长时间才能完成的请求。nginx 写入队列统计数据徘徊在 1000 左右。
无论如何,我觉得我在这里遗漏了一些明显的东西,因为 nginx 和应用程序服务器的这种特殊配置非常普遍,尤其是对于 Unicorn(实际上这是推荐的方法)。是否有任何需要设置的 linux 内核选项,或者 nginx 中的某些内容?关于如何增加上游套接字的吞吐量的任何想法?我显然做错了什么?
关于环境的其他信息:
$ uname -a
Linux …Run Code Online (Sandbox Code Playgroud) 我目前正在尝试让 nginx 在发送某种 50* 错误时向响应添加标头。我已经在 http 块上有一个 add_header 指令,除了它似乎是错误之外,所有请求都会得到尊重。我还在其中一个 vhost 中尝试了以下操作:
location /mediocregopheristhecoolest {
add_header X-Test "blahblahblah";
return 502;
}
Run Code Online (Sandbox Code Playgroud)
转到该页面会给我一个 502,但没有标题。这只是 nginx 不做的事情,还是我做错了?
我有许多虚拟主机,我想通过空白页、错误页面或通常最有效地使用 Nginx 资源的任何方式“关闭”默认虚拟主机,同时只允许其他虚拟主机通过预定义的域。
在不久的将来,我将拥有 3 个 nginx 服务器。一个是其他两个的 SSL 反向代理。所以,例如,我去:
https://www.mysitename.com/site1
Run Code Online (Sandbox Code Playgroud)
本示例中的另外两个服务器是 site1 和 site2。我在代理上安装了 SSL 证书,我想使用反向代理(不需要 SSL,因为所有 3 个都在内部网络上)。出于测试目的,我让 nginx 在 443 上监听 SSL/反向代理,请监听端口 8081 是用于站点 1 的 Rails 应用程序,而 8082 用于站点 2。
我有这个...
server {
listen 443;
server_name mysitename.com;
ssl on;
ssl_certificate ssl/mysitename.com.crt;
ssl_certificate_key ssl/mysitename.com.key;
keepalive_timeout 60;
location /site1 {
proxy_pass http://localhost:8081;
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_redirect http:// https://;
}
location /site2 {
proxy_pass http://localhost:8082;
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_redirect http:// …Run Code Online (Sandbox Code Playgroud) 我有一个 NGINX 作为我们网站的反向代理,并且运行良好。对于需要 ssl 的站点,我关注raymii.org以确保拥有尽可能高的 SSLLabs 分数。其中一个站点需要符合 PCI DSS,但基于最新的 TrustWave 扫描,由于启用了 TLS 1.0,现在失败。
在 nginx.conf 中的 http 级别我有:
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
Run Code Online (Sandbox Code Playgroud)
对于特定的服务器,我有:
ssl_protocols TLSv1.1 TLSv1.2;
Run Code Online (Sandbox Code Playgroud)
我已经更改了密码,将内容从 http 级别移到了每个 ssl 站点服务器,但无论何时运行:
openssl s_client -connect www.example.com:443 -tls1
Run Code Online (Sandbox Code Playgroud)
我获得了 TLS 1.0 的有效连接。SSLLabs 将站点的 nginx 设置作为A但使用 TLS 1.0,所以我相信我的其余设置是正确的,它只是不会关闭 TLS 1.0。
关于我可能会错过什么的想法?
openssl version -a
OpenSSL 1.0.1f 6 Jan 2014
built on: Thu Jun 11 15:28:12 UTC 2015
platform: debian-amd64
nginx -v
nginx version: nginx/1.8.0
Run Code Online (Sandbox Code Playgroud) 我的 Nginx 配置抛出 404.php如下:
## Any other attempt to access PHP files returns a 404.
location ~* ^.+\.php$ {
return 404;
}
Run Code Online (Sandbox Code Playgroud)
但是,我要运行的子文件夹中有一些 index.php 文件。当前的配置是这样的:
location = /sitename/subpage/index.php {
fastcgi_pass phpcgi; #where phpcgi is defined to serve the php files
}
location = /sitename/subpage2/index.php {
fastcgi_pass phpcgi;
}
location = /sitename/subpage3/index.php {
fastcgi_pass phpcgi;
}
Run Code Online (Sandbox Code Playgroud)
它工作得很好,但问题是重复的位置,如果有很多子页面,那么配置就会变得很大。
我尝试了像 * 和一些正则表达式这样的通配符,它表示 nginx 测试通过但没有加载页面,即 404。我尝试的是:
location = /sitename/*/index.php {
fastcgi_pass phpcgi;
}
location ~* ^/sitename/[a-z]/index.php$ {
fastcgi_pass phpcgi;
}
Run Code Online (Sandbox Code Playgroud)
有什么办法可以在该位置使用一些路径名作为正则表达式或通配符?
我已将这些规则添加到mime.types:
application/x-font-ttf ttf;
font/opentype otf;
application/vnd.ms-fontobject eot;
font/x-woff woff;
Run Code Online (Sandbox Code Playgroud)
现在,每一个都正确设置了 Content-Type 标头。我现在唯一的问题是 Firefox 需要 Access-Control-Allow-Origin。我用谷歌搜索了这个答案并将其添加到我的服务器指令中:
location ~* \.(eot|ttf|woff)$ {
add_header Access-Control-Allow-Origin *;
}
Run Code Online (Sandbox Code Playgroud)
但现在我的字体根本没有提供。
相反,error.log报告说它试图在本地文件系统上打开它们..
2010/10/02 22:20:21 [error] 1641#0: *15 open() "/usr/local/nginx/html/fonts/mgopenmodernabold-webfont.woff" 失败 (2: 没有那个文件或目录) ,客户端:69.164.216.142,服务器:static.arounds.org,请求:“HEAD /fonts/mgopenmodernabold-webfont.woff HTTP/1.1”,主机:“static.arounds.org”
任何想法可能与语法有关?我是否需要明确添加一条规则,说不要尝试在本地打开它或什么?
编辑:我认为问题是我现在服务于 2 个不同的地点。而不是我应该在主要的内部进行正则表达式检查,然后提供标题。