Articles of nginx

Nginx request_time比HTTP / 2慢

我们运行nginx / 1.9.10作为前端服务器,多个应用程序服务器作为上游服务器。 我们使用普通的http,主要是https,并在最后的弱点切换到http / 2。 我们这样logging: log_format custom '$host $server_port $request_time ' '$upstream_response_time $remote_addr ' '"$http2" $upstream_addr $time_iso8601 ' '"$request" $status $body_bytes_sent ' '"$http_referer" "$http_user_agent"'; 我们突然看到了$ request_time和$ upstream_response_time之间的较大差异。 这里的区别很自然,因为$ request_time取决于用户networking,而upstream_response_time则不取决于用户networking。 所以通常情况下,只要$ upstream_response_time是稳定的,你不应该太在意$ request_time。 但我仍然想检查发生了什么,因为它使http / 2越来越差因此,我比较了https / 1.1和https / 2.0的平均响应时间 首先,我把所有的http / 1.1请求都封装起来,然后计算平均response_time和average upstream_time: grep ' 443 ' access.log|grep 'HTTP/1.1'|\ cut -d ' ' […]

ngx_http_auth_request_module等价于HAProxy

对于HAProxy或Apache,是否存在与nginx的ngx_http_auth_request_module等效的模块? 该模块允许通过HTTP支持自定义身份validation。 我引用: ngx_http_auth_request_module模块(1.5.4+)根据子请求的结果实现客户端授权。 如果子请求返回2xx响应码,则允许访问。 如果返回401或403,则访问被拒绝,并显示相应的错误代码。 子请求返回的任何其他响应代码都被认为是错误的。

nginx根据参数限制连接

我的网站是一个论坛,它有三种types的url: 线程视图: forum.php?MOD = viewthread&TID = 1256&页= 2 线程列表: forum.php?MOD = forumdisplay&FID = 125页= 61 显示图片: forum.php?MOD =附件&援助= afklafaklj 因为现在我的网站有很多数据,并且有超过10,000,000个线程,有些人试图通过访问数百个线程列表页面来减慢我的网站。 例如,他们使用curl同时获得下面的链接: forum.php?mod=forumdisplay&fid=1&orderby=replies&filter=reply&orderby=replies&page=600 forum.php?mod=forumdisplay&fid=1&orderby=replies&filter=reply&orderby=replies&page=7000 forum.php?mod=forumdisplay&fid=1&orderby=replies&filter=reply&orderby=replies&page=869 forum.php?mod=forumdisplay&fid=1&orderby=replies&filter=reply&orderby=replies&page=10000 这种访问会给MySQL带来额外的压力,并使网站变慢。 所以我想为这些URL添加一个连接限制。 1.对于显示图片和视图线程(types1和3),没有连接限制; 2.对于线程列表(types2),每个IP限制为5个。 我知道我可以使用limit_conn_zone和limit_req_zone来做到这一点。 但事情是,我所有的url都盯着forum.php 。 所以我需要根据不同的参数来限制连接。 谁能帮忙? 谢谢。

nginx单页js应用程序pushstate vs wordpress重写规则

我想添加:/客户端子文件夹包含骨干js应用程序(与pushstate)/pipe理子文件夹包含骨干js应用程序(有或没有pushstate) 当我在浏览器中打开我的http://example.dev/client时,它确实会打开单页面应用程序的index.html,但只要将/ gallery / 1 / date添加到url中,它就会打开wordpress 404页面,而不是pushstate。 这是我的nginx位置块: # {{ ansible_managed }} location ^~ /admin { #alias /var/www/project/admin/public/; try_files $uri $uri/ /index.html; rewrite ^/admin/(.+/)$ /admin/index.html last; } location ^~ /client { #alias /var/www/project/client/public/; try_files $uri $uri/ /index.html; rewrite ^/client/(.+/)$ /client/index.html last; } # Prevent PHP scripts from being executed inside the uploads folder. location […]

NGINX允许/拒绝基于IP和用户代理组合

我有一个关于基于用户代理+ IP的NGINX的允许/拒绝规则的问题。 我目前在我的nginx.conf中有以下内容,允许基于某个“iOS”用户代理值的所有Internet连接。 server { proxy_set_header Proxy-Connection ""; listen *:8443; server_name myserver.com; if ($http_user_agent !~* (ELB|ios)) { return 403; } location / { proxy_http_version 1.1; proxy_pass https://myserver; proxy_set_header Connection "upgrade"; } } 我想允许访问以下组合: “iOS”的任何“IP”+“UserAgent” 要么 IP子网192.168.2.0/24 +“用户代理”值“chrome” 提前致谢。

NGINX不会提示客户端使用SSL证书

在我们的设置上,我们要提醒用户一个客户端SSL证书。 所有证书都由StartSSL颁发。 问题是即使ssl_verify_client on; 设置为“开启”时,网站/浏览器不会提示input证书。 我怎样才能让NGINX提示客户端证书? 这与这个没有答案的问题有关 。 nginx版本:nginx / 1.9.11 我们的服务器configuration: server { listen 80; server_name example.com; # enforce https return 301 https://$server_name$request_uri; } server { listen 443 ssl http2; server_name example.com; # strenghen ssl security ssl_certificate SOMECERT; ssl_certificate_key SOMEKEY; ssl_client_certificate SOMECERT; ssl_verify_client on; ssl_protocols TLSv1 TLSv1.1 TLSv1.2; ssl_prefer_server_ciphers on; ssl_session_cache shared:SSL:10m; ssl_ciphers "EECDH+AESGCM:EDH+AESGCM:ECDHE-RSA-AES128-GCM-SHA256:AES256+EECDH:DHE-RSA-AES128-GCM-SHA256:AES256+EDH:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA256:ECDHE-RSA-AES256-SHA:ECDHE-RSA-AES128-SHA:DHE-RSA-AES256-SHA256:DHE-RSA-AES128-SHA256:DHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA:ECDHE-RSA-DES-CBC3-SHA:EDH-RSA-DES-CBC3-SHA:AES256-GCM-SHA384:AES128-GCM-SHA256:AES256-SHA256:AES128-SHA256:AES256-SHA:AES128-SHA:DES-CBC3-SHA:HIGH:!aNULL:!eNULL:!EXPORT:!DES:!MD5:!PSK:!RC4"; […]

每次请求之前,Nginx都会调用脚本

我需要在每次请求之前从nginx(最好是PHP)运行脚本。 我所有的服务页面都是纯HTML。 谷歌search把我尽可能LUA,但即使我已经完全访问服务器,我宁愿不改变任何东西除了Nginx的configuration(无论是http或server块)。 我有php5-fpm也在现场运行。 原因是,我们希望允许开发人员创buildHTML静态单页面应用程序,这些应用程序需要将AJAX张贴到外部API。 CORS和所有设置都很好,都很好,但我们想在目标API服务器上启动一个会话。

PHP-FPM随机超时崩溃

关于这个问题也有类似的问题,但是在这个问题上似乎没有任何亮点。 我在Ubuntu 14.04上使用PHP 5.6.18。 它的服务器是一个8核心CPU(不确定的确切型号)和8 GB的RAM的办公室服务器。 这台服务器的运行时间差不多有2.5年左右,我已经做了维护,最初是在Ubuntu 12.04上使用旧版本的php,但是随着时间的推移,升级了它。 我最后一次更新是在6个月前,没有问题。 一般设置是nginx将请求传递给apache以进行cms开发,并且我们有各种工作应用程序直接运行在nginx之外。 然而在过去的几天里,PHP-FPM(CLI / APACHE PHP工作正常)似乎每隔5分钟就会崩溃,有时会持续更长的时间,甚至通常在一夜之间罚款。 服务器本身没有负载,日志只显示php超时请求,然后不会处理任何进一步的请求,直到重新启动。 奇怪的是最近没有对服务器做任何事情,这只是在3天前随机启动,没有明显的原因。 所有的努力(重新php / mysql,重新启动整个服务器等)已经失败。 这里是我的主要nginxconfiguration的一部分(我已经多次改变这些值现在尝试各种各样的东西,现在大多数是禁用)。 #client_header_timeout 600; #client_body_timeout 600; #fastcgi_read_timeout 600; client_max_body_size 2048m; #fastcgi_buffers 8 4k|8k; #fastcgi_buffers 8 128k; #fastcgi_buffer_size 128k; #client_max_body_size 2048M; send_timeout 900; #fastcgi_read_timeout 3000; sendfile on; tcp_nopush on; tcp_nodelay on; keepalive_timeout 65; types_hash_max_size 2048; # server_tokens off; […]

如何用Angular 2 PathLocationStrategyconfigurationNGINX proxy_pass

我目前正在为我的Angular 2前端提供PM2,在IP地址http://198.xxx.xxx.xx:8080/ 。 当使用Angular 2的HashLocationStrategy ,非根path重新加载正常。 当使用PathLocationStrategy ,刷新不起作用。 有没有办法通过path通过proxy_pass的location /以便像/aboutpath解决/about由/about 2 Angular 2路由器提供? 我目前的设置将在应用程序中成功执行,但是如果我刷新/about ,它将返回一个空白页面: upstream app_server { server unix:/var/run/unicorn.sock fail_timeout=0; } server { listen 80; root http://198.xxx.xxx.xx:8080/; server_name _; index index.htm index.html; location ~* ^.+\.(jpg|jpeg|gif|png|ico|zip|tgz|gz|rar|bz2|doc|xls|exe|pdf|ppt|txt|tar|mid|midi|wav|bmp|rtf|mp3|flv|mpeg|avi)$ { try_files $uri @app; } location / { proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header Host $http_host; proxy_redirect off; […]

Nginx位置匹配只在匹配root时才起作用

我正在尝试configurationnginx,所以我可以有两个位置。 一个用于我的节点API,另一个用于我的Jenkins CI。 http://my_ip/api应该指向我的节点服务器并且http://my_ip/jenkins应该指向我的jenkins CI 我有这个服务器块。 server { listen 80; server_name my_ip_address; location /api { proxy_pass http://127.0.0.1:1234; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection 'upgrade'; proxy_set_header Host $host; proxy_cache_bypass $http_upgrade; } location /jenkins { 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://localhost:8080; proxy_read_timeout 90; } } 该configuration不起作用。 但是,如果我使用任何与root相匹配的位置,它就可以工作。 这工作没有问题。 […]