Articles of nginx

从NGINX Plus池删除服务器

是否可以通过REST API或其他方式从Loadbalancer / NGINX Pool中移除Appserver? 我们在部署中遇到问题,想要逐个删除appservers并在其中部署更改。 我们可以访问NGINX Plus,但在他们的网站上找不到任何东西。

nginxcaching问题与多个上游

我有一个奇怪的问题与两个相同的上游nginx代理+caching设置代理。 我有两个相同的上游服务器设置在主动/备份configuration。 caching工作正常的服务器之一,但只要我切换活动/备份configuration和重新加载nginx,我没有得到任何caching命中,并错误日志满足这些: 2017/06/15 10:14:21 [warn] 19048#19048: *2562 an upstream response is buffered to a temporary file /mnt/cache/temp/0000000504 while reading upstream, client: <CLIENT IP>, server: , request: "GET /secure/assets/file.ts?id=456 HTTP/1.1", upstream: "http://<UPSTREAM IP>:80/assets/file.ts", host: "server-host" 现在,我找不到为什么nginx必须缓冲一个上游而不是另一个的响应,因为上游服务器有完全相同的文件,并且坐在同一个networking中。 现在,configuration的相关部分: http { tcp_nodelay on; proxy_cache_path /mnt/cache/cache keys_zone=one:20m inactive=24h loader_threshold=300 loader_files=200 max_size=180g; proxy_cache_key $uri; upstream master-cdn { server cdn1 […]

在包含点(句点)的nginx访问日志中loggingHTTP标头

我有一个自定义标题“ AB.CD ”。 我想在我的nginx访问日志中logging这个标题值。 这是我想在nginx.conf中尝试的日志格式: log_format main '$remote_addr – $remote_user [$time_local] "$request" "$http_AB.CD" ' 然而点(周期)似乎是不可接受的。 我也尝试逃脱它,但没用。 它将数据logging为… "-" "-.CD" logging一个包含点的标题的正确方法是什么?

Nginx中请求的顺序stream

我有一个场景,当一个实际的请求之前,服务器需要做授权请求。 所以,一个请求由两个不同的服务来服务。 Nginx的位置必须由Auth-Service来处理,如果响应状态是200 OK,则请求应该被转发到Feature-Service。 否则,如果响应状态401,那么这个状态应该被回复到​​前端。 upstream auth_service { server localhost:8180; } upstream feature_service { server localhost:8080; } location /authAndDo { # suggest here }

在代理之前删除可选的结尾斜杠

我想代理一些请求到另一台服务器,并永远不会发送结尾的斜杠。 我已经拿出了正在工作的以下内容,但这真的是最好的方法吗? 这感觉有点像我漫长的一天,虽然也许我已经盯着它太久了… location ~ ^/proxy(?<proxy_to_path>.+[^/])/?$ { proxy_pass http://127.0.0.1:8080$proxy_to_path; }

从nginx目录名称中查找索引页面名称

我有一个像下面这样的设置的静态网站: location / { index index.html; } location /about/ { index about.html; } location /app/ { index app.html; } location /app/support/ { index support.html; } 这种方法不会扩展,但我想继续索引文件的命名实践。 如何写一个常见的情况下解决包装目录的名称到相同名称的索引文件? 谢谢!

nginx通过php脚本提供图片

即时通讯不是非常有经验的Nginx,所以我有点与虚拟主机设置丢失。 基本上我的应用程序,当服务一些图像服务他们通过PHP脚本这是非常简单的与Apache:寻找物理形象 – >如果没有发现推送一切到index.php与请求string作为参数。 不,我正在尝试这个应用程序在Nginx上,除了通过脚本服务的图像(我只是得到一个404),一切工作。 这是我的vgin for nginx: server { listen 80; server_name ~^(www\.)?(?<sname>.+?).subdomain.domain.com$; root /var/www/$sname/current/public; index index.html index.htm index.php; location / { try_files $uri $uri/ /index.php$is_args$args; } location ~* \.(jpg|jpeg|gif|png|bmp|ico|pdf|flv|swf|exe|html|htm|txt|css|js) { add_header Cache-Control public; add_header Cache-Control must-revalidate; expires 7d; } location ~ \.php$ { fastcgi_pass unix:/var/run/php/php7.1-fpm.sock; include fastcgi_params; fastcgi_index index.php; } location ~ /\.ht […]

Nginx的代理服务器:除子path之外,全部拒绝

我正在尝试为当前正在开发的节点应用程序设置Nginx代理。 我试图只允许列入白名单的IP访问主站点,但我有一个/ apipath,我希望可以通过任何IP访问。 我已经试过以不同的顺序定义位置块,嵌套等,但没有骰子,目前似乎不传递任何请求到/代理到代理 upstream node_upstream { server 127.0.0.1:3000 fail_timeout=0; } server { listen 80; listen [::]:80; server_name example.com; location /api { allow all; } location / { proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_redirect off; proxy_buffering off; proxy_pass http://node_upstream; allow 1.2.3.4; deny all; } location /public { root /path/to/static/files; } listen 443 ssl; … […]

在NGINX重写期间保持标题

我试图build立一个NGINX代理,根据查询string参数的内容将所有请求redirect到两台服务器之一。 主要有: https://my.site.com/api/…&server=a 应该redirect到 https://a.site.com/api/…&server=a 和 https://my.site.com/api/…&server=b 应该redirect到 https://b.site.com/api/…&server=b 我似乎有一个configuration,执行重写主机名和保持查询string完整的基本工作: error_log /dev/stdout info; worker_processes 1; events { worker_connections 1024; accept_mutex off; } http { access_log /dev/stdout combined; sendfile on; server { listen 443 ssl; server_name $hostname; ssl_certificate /etc/ssl/nginx.crt; ssl_certificate_key /etc/ssl/nginx.key; ssl_protocols TLSv1 TLSv1.1 TLSv1.2; ssl_ciphers HIGH:!aNULL:!MD5; location ~ /api/ { if ($arg_server !~ "^(a|b)$") { […]

如果url / file不存在,nginx将从本地服务器提供不同的文件名

有没有办法如果文件不存在服务器另一个app-*.js文件在其他文件夹中,例如: 转到url: http : //www.example.com/assets/build/app/app-48fee50a26.js 我收到以下错误信息: [error] 17788#17788: *1 open() "/var/app/assets/build/app/app-48fee50a26.js" failed (2: No such file or directory), client: , server: , request: "GET /assets/build/app/app-48fee50a26.js HTTP/1.1", host:"" 我想在相同的文件夹/var/app/assets/build/app/提供其他任何js文件,但其他文件的名称可以不断更改,例如app-62a5962b0a11.js 。 我正在考虑app\-(.*)\.js 。 以下所有示例都不起作用: server { listen 80 default_server; root /var/app; location /assets/build/app/app\-(.*)\.js { try_files $uri $uri/ /assets/build/app/app\-(.*)\.js; } } server { listen 80 default_server; root /var/app; […]