Articles of nginx

Nginx:可能基于proxy_pass响应生成redirect?

目前我有一个系统与一些不同的节点,我想要做到以下几点: 代理传递一个请求(一个简单的GET),并接收一个包含URL的主体的响应 将客户端的原始请求redirect到此URL(响应正文中的一个) 简而言之 – 我收到一个客户端请求,再次请求查找他们应该去的URL,然后将他们的原始请求redirect到正确的位置。 这将是可能的Nginx或?

反向代理与Nginx显示默认屏幕

我正在尝试使用Nginx为我的JIRA实例设置一个反向代理。 server { listen 80; server_name jira.domain.com; location / { proxy_set_header X-Forwarded-Host $host; proxy_set_header X-Forwarded-Server $host; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_pass http://localhost:8080; } } 每次我直接点击url,我都会得到默认的“Welcome to Nginx”页面。 如果我刷新,它会带我到JIRA仪表板。 我在Nginx后面的Confluence框中遇到同样的问题。 我错过了什么让这个工作正常?

代理服务器上的HTTP摘要式身份validation

我有一个1.)客户端,一个2.)nginx代理服务器和3.)一些服务器的地址是无法访问客户端,代理处理从客户端到这些服务器的通信。 到目前为止工作得很好。 但是现在,这些服务器中的一些需要通过HTTP摘要进行validation,而不是HTTP基本validation,并且客户端不再能够正确地在这些服务器上进行validation。 感谢wget和Wireshark,我能够解决这个问题。 有效身份validation的HTTP标头如下所示: GET /targetpath/myfile.jpg HTTP/1.1 User-Agent: Wget/1.15 (linux-gnu) Accept: */* Host: 192.168.5.215 Connection: Keep-Alive Authorization: Digest username="myuser", realm="MyRealm", nonce="x+AfVa0pBQA=ad6ef47eb7e95f9fe8e148a9ccd22dcdb3b8a7f6", uri="/targetpath/myfile.jpg", response="6f7cf06ddededd7295ce3a16b4196528", qop=auth, nc=00000001, cnonce="26310a3e", algorithm="MD5" 由代理完成的不工作authentication的头部看起来有点不同: GET /targetpath/myfile.jpg HTTP/1.0 Connection: Keep-Alive Host: 192.168.5.215 User-Agent: Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:42.0) Gecko/20100101 Firefox/42.0 Referer: http://localhost/ Authorization: Digest username="MyUser", realm="MyRealm", nonce="Sh3xpq0pBQA=ccc43b898eccd1933fa63383d8a6447385119db9", uri="/proxypath/192.168.5.215/targetpath/myfile.jpg", algorithm=MD5, response="068f00e3460e4b585b4a90fa76be8b27", […]

configuration用户列表http头/用户的NGINX?

我有一个nginx的configuration,做ssl-pkiauthentication – 我很高兴能够authentication我的用户。 不过,我想进一步 – 我想要允许/拒绝访问基于SSLvariables的资源 – 特别是$ssl_client_s_dn (并validation$ssl_client_verify是“成功”) 基于此,我想根据用户列表select性地允许/拒绝URL组。 在这种情况下,Elasticsearch。 我有: 我想访问的一些通用API(服务器状态,集群运行状况,“ping”)。 有些迹象表明,我希望一群用户能够“看到” 有些指标我想要另一组用户“看”。 现在看起来我可以用http_auth_request来做到这一点 – redirect到一个'auth'url – 有点像这个博客中概述的 但是这对我来说似乎有点矫枉过正,为此我必须编写自己的“引擎”来接受/读取http,validation它是否等于正则expression式,并且吐出一个响应代码。 我正在试图做的“白名单”,例如对我来说: allow if /(logstash|filebeat|topbeat)-mygroup-.*/; (其中“mygroup”是从某个文件中读取的,理想情况下允许拥有多个组的成员资格)。 现在,最好用http_auth_request完成,并把它提供给一个真正的削减validation器的Web应用程序(脚本独立,或NGINX内的cgitypes的脚本)还是有更好的方法吗? 这个模块是一个额外的nginx,这意味着重新编译。 这不是一个灾难,但如果没有必要(我可以继续使用“股票”nginx),这将是可取的。

PHP页面拒绝出现,尽pipe检查php-fpm,SELinux和nginx

问题 我有一个小的Web服务器,托pipe一个小的PHP页面,执行一个非常小的function。 我曾经在另一台机器上托pipe这个。 我将网站移动到具有不同操作系统的新机器,现在,PHP页面不会加载任何查看该网站的任何人。 它似乎是从外面下来的。 网站上的其他页面是可访问的。 它是什么 红帽企业Linux服务器版本7.2(Maipo) nginx版本:nginx / 1.6.3 PHP 5.4.16(fpm-fcgi) 是SELinux吗? 这是我第一个想法。 我检查,以确保适当的上下文被应用到我的networking服务器。 所有的服务器块都放在/var/www/让SELinux像Apache一样处理它们。 我试着用setenforce 0closuresSELinux来testing这是否是问题。 没有任何改变,我又把它打开了。 PHP-FPM 我通过yum安装了php-fpm。 php.ini 我遵循文档,并在我的php.ini文件中将cgi.fix_pathinfo设置更改为0。 它看起来如下。 cgi.fix_pathinfo=0 php-fpm.conf 根据在线文档 ,我确信php-fpm安装中包含/etc/php-fpm.d/*.conf目录。 守护也被设置为false。 include=/etc/php-fpm.d/*.conf daemonize = no www.conf 我也遵循在线文档来创buildphp-fpm套接字。 我对configuration文件的更改如下所示。 listen = /var/run/php-fpm/php-fpm.sock listen.owner = nginx listen.group = nginx listen.mode = 0660 日志 来自/var/log/php-fpm/error.log的错误日志一直没有什么帮助。 [30-Jan-2016 01:24:56] NOTICE: fpm […]

如何从nginx中的urlstring中删除连字符和下划线?

我一直试图删除任何/所有的连字符 – 并强调_传入的URL请求到我的nginx服务器。 所以要清楚的是,当有人input一个URL如下: https://www.example.com/my-name_is-tom …我需要nginx重写URL如下: https://www.example.com/mynameistom 我正在使用以下configuration: server { listen 80; return 301 https://$host$request_uri; } server { listen 443 ssl; server_name top.example.com; ssl_certificate /etc/ssl/top.example.com.crt; ssl_certificate_key /etc/ssl/top.example.com.key; # set the root root /srv/top.exemple.com; index index.html; location ~ ^/([a-zA-Z0-9=\?\_\-]+)$ { rewrite ^(/.*)-(.*)$ $1$2 last; rewrite ^(/.*)_(.*)$ $1$2 last; rewrite ^/(.*)$ / break; } location / { […]

将参数附加到nginx上的移动子域的request_uri

我在nginx 1.9.3 / OpenBSD 5.8上运行了一个多语言wiki(MediaWiki 1.26.2和MobileFrontend )。 对于每种语言wiki,我都有一个单独的MediaWiki安装文件夹和一个像en.domain.com这样的子域指向该文件夹。 我想使用桌面视图的MediaWiki安装文件夹为移动视图添加一个像en.m.domain.com这样的子域名,但要添加&mobileaction=toggle_view_mobile (或?mobileaction=toggle_view_mobile ,带有问号而不是&符号如果已经有一个参数)。 我也使用CORS, 短url和从http://到https://redirect。 这是我的服务器块的样子: server { listen 80; server_name en.m.domain.com; root /path/to/domain/en; index index.html index.htm index.php; autoindex off; # CORS add_header 'Access-Control-Allow-Origin' '*'; add_header 'Access-Control-Allow-Credentials' 'true'; add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS'; add_header 'Access-Control-Allow-Headers' 'X-Requested-With, Accept, Content-Type, Origin'; # Redirect to https:// if ($http_cf_visitor ~ '{"scheme":"http"}') […]

如果从相同的域调用Nginxcaching失效只适用

我正在使用FRiCKLE的ngx_cache_purge模块来使代理caching失效。 我遇到了一个问题,无法清除caching时使用不同的主机部分访问失效的url比用于访问原始内容。 例如,如果我访问这样的内容: curl -H 'Content-Type: application/json' -d '{ "token": "pts7v4nqf7stfq35qeb570v5n2" }' -X POST -D – http://api.example.com/news/article/cache-testing caching文件是用一个普遍的关键字创build的,它的工作原理是,随后的请求是正确的。 当内容发生变化时,为了清除caching的数据,后端在所有Web服务器上执行相同的操作: curl -D – http://10.200.100.101:8080/invalidate_cached_url/POST/news/article/cache-testing 而这将返回404,因为caching文件是以某种方式生成的host部分的URL,为了清除它,我必须调用无效的URL在同一主机在线。 这是一个问题,因为我有一个webload的负载均衡器。 为了certificate这一点,我保存了上述方法生成的caching文件并清除了caching,然后直接用IP地址访问了api端点: curl -H 'Content-Type: application/json' -d '{ "token": "pts7v4nqf7stfq35qeb570v5n2" }' -X POST -D – http://10.200.100.101:8080/news/article/cache-testing 现在当我尝试清除像上面的caching,它的工作原理。 而且足够真正的caching文件是不同的,但在二进制级别,但密钥是相同的。 有没有解决的办法? 这是我的configuration: proxy_cache_path /tmp/nginx/example-api levels=1:2 keys_zone=example_api_zone:300m inactive=1h; upstream origin_api { server localhost:8888; } […]

当PHP在后台运行时找不到404 – Nginx

我注意到,即使脚本在后台工作,调用.php文件时也会得到404 – Not Found。 PHP文件下载一个长的JSON,并填充一个数据库,直到我closures窗口。 我正在使用PHP 5和Nginx 1.9.3。 我该如何解决这个问题,这是一个configuration问题? 感谢您的时间。 编辑 这个问题只发生在很长的JSON中。 我正在testing本地主机,我会在testing后格式化这个安装。 示例url: http://localhost/php/get_visit_log.php configuration:这里有一些截图。

Nginx:根据HTTP方法处理位置

我想处理从caching中的所有[GET]到/ api的请求,并处理所有其他的请求,如上一个位置块(没有caching)。 所有使用方法PUT,POST,DELETE的/ api的请求也都没有使用caching。 我在这里看到类似的问题Nginx的代理通过请求方法 ,但仍然不明白如何使用它在我的情况。 提前致谢。 我的configuration: location / { root /var/www/project/web; # try to serve file directly, fallback to app.php try_files $uri /app.php$is_args$args; } location ~ ^/api { root /var/www/project/web/app.php; fastcgi_send_timeout 600s; fastcgi_read_timeout 600s; fastcgi_pass unix:/var/run/php5-fpm.sock; fastcgi_split_path_info ^(.+\.php)(/?.*)$; include fastcgi_params; fastcgi_cache fcgi; fastcgi_cache_valid 200 5m; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; fastcgi_param HTTPS off; } location […]