我怎么能让nginx从正则expression式匹配返回一个状态码? location ~* "^/([\d]{3})" { return $1; } 返回错误“无效的返回码”$ 1“' 我试图设置一个testing环境,我可以去/ 401和返回401代码,/ 402和402等,而不是只需要单独添加每个位置。
正在设置一个nginx服务器。 我想添加一些location块,只允许index.html或index.php的父文件夹被提供,但会自己redirectindex.html或index.php 。 我也希望server条目将redirect以斜杠结尾的文件夹为非斜杠版本。 例如: http://www.example.com/about —> good http://www.example.com/about/ —> redirects to http://www.example.com/about http://www.example.com/about/index.html —> redirects to http://www.example.com/about 这里是我有的一个sites-available文件,缩写为MCVE,并删除任何额外的信息。 server { listen 80; root /var/www/html; index index.php index.html index.htm; ssi on; server_name example.com; location ~ /\. { access_log off; log_not_found off; deny all; } location ~ ~$ { access_log off; log_not_found off; deny all; } […]
将问题分解为一句话:是否可以打开nginx中的proxy_buffering,但是当客户端速度足够快,并且不能缓冲时,立即向客户端发送后端服务器的响应? 我知道如果closuresproxy_buffering,所有请求都会通过nginx,但后端服务器worker仍然是打开的,直到所有数据都发送到客户端。 如果打开proxy_buffering,则nginx将等待后端服务器完成,然后开始将数据发送到客户端,后端服务器可以在数据位于客户端之前closures进程。 为了简单起见,我希望两者的优点:我希望客户尽快获得后端服务器的第一个块,但也希望从后端服务器的所有数据不能传递给客户端(如慢连接)将被nginx缓冲,所以后端服务器进程可以尽快closures。 为了理解为什么我需要这个:我有一个PHP后端服务器与应用程序刷新序列输出。 所以如果你请求一个页面,那么带有css,js等的HTML会在进程启动后立即刷新,之后“重”应用程序工作开始,并且我发送片段中的一部分html。 所以这样做的好处是客户/浏览器可以在请求完成之前开始下载.js,.css和parsing它们,所以我减less了我网站的关键呈现path。 问题是,如果proxy_buffering处于打开状态,客户端将不会获取任何数据,直到后端请求完成。 如果我打开proxy_buffering,则后端进程保持打开状态,直到客户端收到最后一个数据为止。 提前致谢
我们使用Nginx作为负载平衡器。 Nginx的IP地址为10.110.0.200,主机地址为10.110.3.20 | 10.110.3.21 这是configuration文件: upstream test1 { server 10.110.3.20:xxxx; } server { listen 10.110.0.200:80; server_name test1.xyx.com; location / { proxy_set_header Host $host; proxy_pass http://test1; } } 我们收到错误消息 * 798上行超时(110:连接超时)连接上行,客户端:10.100.88.210 任何线索? 当我们curl的时候 curl -v http://10.110.3.20:xxxx *无法连接到主机*closures连接#0curl:(7)无法连接到主机
在mywebsite.com上,我用wordpress运行docker容器。 我开始了 docker run -p 8000:80 –name docker-wordpress-nginx -d 和 docker ps 节目 0.0.0.0:8000->80/tcp 在我的主机上我有nginx运行 server { listen 80; … server_name mywebsite.com www.mywebsite.com; … location / { proxy_pass http://localhost:8000/; proxy_set_header Host $host; } 我故意运行docker容器为8000:80,因为我有我的主机的端口80上运行的其他东西。我login mywebsite.com:8000/wp-admin/ 和 http://mywebsite.com:8000/wp-admin/options-general.php 并从中更改了网站地址(URL) http://mywebsite.com:8000 至 http://mywebsite.com 所以,现在,我去这里之后: http://mywebsite.com/wp-admin/ 我在这里redirect: http://mywebsite.com:8000/wp-login.php?redirect_to=http%3A%2F%2Fmywebsite.com%2Fwp-admin%2F&reauth=1 而我login后,我显示此页面: http://mywebsite.com/wp-admin/ 我正确地看到它。 但是,如果我点击里面的任何链接,如“页面”链接,我有空白页面 File not Found 作为网页内容和地址栏显示: http://mywebsite.com/wp-admin/edit.php?post_type=page 另外,我试图login到pipe理界面 […]
有几个类似的问题,但我一直无法弄清楚如何解决我的问题。 我在端口80上运行一个nginx的实例,作为nginx的其他一些实例的反向代理(这是反向代理运行django应用程序的不同实例的gunicorn)。 当我导航到gaiadev1 /,它的作品。 当我login时,发生redirect发送应用程序到gaiadev:8080。 我想停止发生这种redirect,但我不知道如何。 这是80端口的代理服务器的conf: upstream gaiadev1 { server 127.0.0.1:8001; keepalive 32; } upstream gaiatest1 { server 127.0.0.1:9001; keepalive 32; } server { listen 80 default_server; listen [::]:80 default_server ipv6only=on; server_name gaiadev1; location / { proxy_pass http://gaiadev1; } } server { listen 80; listen [::]:80; server_name gaiatest1; location / { proxy_pass http://gaiatest1; } […]
我的一个网站不断收到包含查询string的假URL请求。 我有caching,但不幸的是查询string被忽略。 现在每当我收到大量的查询string请求时,我的服务器就会因为命中数据库和PHP处理(我正在使用wordpress)而被钉死,而且我的服务器变得无响应。 我怎么能忽略/重写请求包含查询string的任何url将通过我的后端,但允许他们的静态文件和某些URL(/search/,/ wp-admin /,wp-login.php等)? 我的nginx设置 location ~ \.php$ { fastcgi_index index.php; try_files $uri = 404; include fastcgi_params; fastcgi_split_path_info ^(.+.php)(.*)$; fastcgi_pass unix:/dev/shm/php-fpm-www.sock; fastcgi_intercept_errors on; fastcgi_ignore_client_abort off; } # Use cached or actual file if they exists, otherwise pass request to WordPress location / { try_files /wp-content/cache/supercache/$http_host/$cache_uri/index.html $uri $uri/ /index.php?$args ; } 有没有一个简单的(ISH)的方式来完成这与重写? 我感到震惊的是,在互联网上我几乎找不到任何其他的信息(也许我没有find正确的解决scheme),我当然不能成为唯一面临这个问题的人。 每个人如何处理?
我需要保持域的根严格运行非SSL,但允许子文件夹使用SSL。 我从当前configuration采取从https://stackoverflow.com/questions/12398514/nginx-https-when-only-matching-admin-subfolder 当我实现这个时,我得到了域的根和需要SSL的子文件夹的404: server { listen 80; server_name DOMAIN.com www.DOMAIN.com; access_log /home/nginx/domains/DOMAIN.com/log/access.log combined; error_log /home/nginx/domains/DOMAIN.com/log/error.log; location /members { return 301 https://$server_name$request_uri; } location / { root /home/nginx/domains/DOMAIN.com/public; # block common exploits, sql injections etc # include /usr/local/nginx/conf/block.conf; # Enables directory listings when index file not found autoindex on; try_files $uri $uri/ /index.php?$args; } location ~* […]
我在nginx上build立了一个(以前使用apache)magento站点。 现在页面无法正确加载,并且外观目录正在生成错误。 从浏览器中,你可以在控制台中看到这个 – GET http://site/skin/frontend/custom/default/ 403 (Forbidden) nginx错误日志有这个 – 2015/08/09 14:31:05 [error] 14873#0: *3 directory index of "/var/www/site.com/skin/frontend/custom/default/" is forbidden, client: IPADDRESS, server: site.com, request: "GET /skin/frontend/custom/default/ HTTP/1.1", host: "IPADDRESS", referrer: "http://site/page.html" 在访问日志中进一步详细介绍了这个目录下的实际文件。 例如。 [09/Aug/2015:15:08:25 -0400] "GET /skin/frontend/custom/default/js/lib/jquery-2.1.4.min.js HTTP/1.1" 200 34448 "http://178.62.18.57/index.php/page.html" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/44.0.2403.130 […]
在WireShark中观察以下场景: 我在这里看到的问题是,在从服务器(4090)接收到[FIN, ACK]并确认(4092)之后,http客户端尝试发送另一个HTTP请求,而不是立即closures(并且可能重新build立)TCP连接。 它看起来像[FIN, ACK]被HTTP客户端简单地忽略。 根据RFC 7230(6.3),HTTP协议使用Connection头指定了它的持久连接pipe理机制。 它工作得很好,因为它支持客户端和服务器。 但是HTTP通常运行在TCP之上。 TCP连接pipe理对协议不在意,可以独立于HTTP使用。 但是,HTTP客户端不支持处理这个(可能不应该,它应该在套接字级支持)。 但是服务器确实利用它,因为它允许在不发送额外的HTTP请求的情况下正常closures连接。 例如,当连接超时或configuration重载时,nginx发送FIN包。 注意当HTTP客户端从服务器接收到RST ,会closures连接。 它似乎是在套接字级别上完成的,因为在HTTP客户端的源代码中找不到与此相关的任何内容。 我对情况的理解是否正确? 客户端忽略FIN消息,而服务器使用它,似乎是完全错误的。 为什么RST在套接字级别上处理,但是FIN不是? HTTP客户端应该如何处理TCP连接closures有什么RFC /其他标准? 是nginx做非标准的事情还是HTTP客户端不遵循标准? PS我可以在Python 2/3中使用HTTP客户端,用C编写的Java和httperf实用程序来重现它。所以我认为HTTP客户端忽略FIN消息是很常见的。 我想明白为什么。