Articles of nginx

如何在nginx中匹配包含查询string的已知MIMEtypes的请求?

我正在使用nginx静态地提供资源,并将所有非资产请求路由到PHP前端控制器。 我有一个location块,如下所示: location / { include /etc/nginx/mime.types; index index.php; try_files $request_uri $request_uri/ /index.php?$query_string; } 据我所知,这应该首先尝试匹配任何已知的MIMEtypes的请求,如果没有find匹配的文件,它应该尝试对我的PHP location块(未显示)的请求。 如果我想访问http://example.com/css/owls.css ,这很好用,但如果我尝试访问http://example.com/css/owls.css?t=_423632636 ,它不会认识到“扩展”,所以试图将请求传递到我的PHP入口点(当然,失败)。 我怎么能告诉nginx http://example.com/css/owls.css?t=_423632636 (或任何其他查询string,遵循有效的MIMEtypes)的请求应该首先尝试匹配静态文件css/owls.css ? 如果文件(没有查询string)不存在,那么它应该回退到PHP的try_files命令。

Nginx允许来自某个服务器的请求

我有一个服务通过nginx访问,我只希望白名单发布请求。 我已经写在我的nginxconfiguration文件中: location / { if ( $request_method ~ ^(POST|PUT)$ ) { allow 127.0.0.1; } if ( $request_method !~ ^(GET|POST|PUT|HEAD)$ ) { return 405; } } 这个configuration给我下面的错误 – nginx: [emerg] "allow" directive is not allowed here 另一方面,如果我写这样的if块的allow指令,它的工作原理。 location / { allow 127.0.0.1; if ( $request_method !~ ^(GET|POST|PUT|HEAD)$ ) { return 405; } } 我相信这意味着我不能在if块中使用allow指令。 我在这里做错了什么? […]

如何nginx重写设置非结尾斜杠到tracing斜杠

我在Nginx的rewrite(redirect)规则上遇到了问题。 这是我目前的设置 location /new { rewrite ^/new/([^/.]+)/$ /new/index.php?id=$1 last; } www.mysite.com/new/33/ – >没关系 www.mysite.com/new/33 – >找不到错误 所以,我的问题是:我想redirect非尾随结尾斜杠。

免费80球童的球童

我试图使用端口80上的球童,但我得到一个错误,说该端口已被使用。 listen tcp :80: bind: address already in use. 当我检查看看是什么使用它,这是我得到的。 sonar@SonarQube:~$ netstat -an | grep ":80" tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN tcp 0 0 10.1.1.5:42214 168.63.129.16:80 TIME_WAIT tcp 0 0 10.1.1.5:42222 168.63.129.16:80 TIME_WAIT tcp6 0 0 :::80 :::* LISTEN 我怎样才能杀死在80上运行的任何东西? 可以运行sudo setcap 'cap_net_bind_service=+ep' /usr/local/bin/caddy cause it? 如果是的话,我该如何解决呢? 更新(添加-p后) tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN […]

当在nginx上实现浏览器caching时,静态资产的404错误

目前我有一个nginx.conf文件,看起来像这样(用括号代替敏感数据): worker_processes 3; events { worker_connections 1024; } http { access_log [/…]; error_log [/…] crit; include mime.types; sendfile on; server { server_name […] […]; return 301 […] $request_uri; } server { listen 127.0.0.1:[…]; root [/…]; location / { include uwsgi_params; uwsgi_pass […/uwsgi.sock]; } } } 如果我在现有位置{…}子句之后添加以下行,如此处所示 ,加载网站将为图像,CSS和js资产产生“404未find”错误: location ~* \.(jpg|jpeg|png|gif|ico|css|js)$ { expires 1d; } 我怎样才能实现浏览器caching,而不会导致“404”的问题?

允许encryptionNginx – 您的连接不安全 – 对于错误的子域

我从encryption的encryption工作正常。 我的Nginxconfiguration只允许SSL连接。 www.example.com,example.com,blog.example.com – 一切正常。 问题 如果types为www1.example.com或blog12.example.com – 出现错误: 您的连接不安全 我读过与通配符证书相关的内容 – 但是我们现在还不支持encryption。 题 是否有可能改变configuration得到服务器找不到错误,而不是你的连接是不安全的那些“错误的”子域? 信息 让encryption呼叫 sudo letsencrypt certonly -a webroot –webroot-path=/var/www/html -d example.com -d www.example.com /etc/nginx/sites-available/example server { listen 80 default_server; listen [::]:80 default_server; server_name example.com www.example.com; return 301 https://$server_name$request_uri; } server { # SSL configuration listen 443 ssl http2 default_server; listen [::]:443 […]

基于Nginxpath的客户端TLSvalidation

我已经search了一下,似乎nginx并没有提供一种基于path进行客户端TLSvalidation的方法。 我只是想问问社区,如果情况依然如此,或者是有什么工作的话。 我基本上试图有一个pipe理页面的domain-name/admin访问公共域名只需要服务器端的TLSvalidation,但我只想为/ adminpath进行相互的TLSvalidation。 这甚至可能不必为pipe理员获取新的域名?

NginX使用错误的configuration文件

我有一个networking服务器与NginX和每个网站在不同的configuration文件。 我注意到,如果我有一个不存在的网站configuration(没有DNS名称或错误的设置)NginX只是redirect到我的其他网站之一。 总是相同的,所以不是随机的。 这个怎么用? 如果NginX应该提供的configuration不正确,NginX如何决定将其redirect到哪里? 简单的例子:如果我input服务器的IP地址到浏览器,我得到的特定页面加载。OFC我没有设置任何configuration服务的IP地址。 你知道我怎样才能改变NginX服务于其他的东西,或者可能会抛出一个错误? 哦,是的,关于这个 如果我去我的IP地址,没有日志文件logging任何东西。 显然,一个网站加载。

排除让我们encryption来自nginx httpsredirect的http请求

我发现这里已经有一些问题了,但没有人帮我解决这个问题。 我今天安装了一个debian 8服务器,对我的域的每个请求都被redirect到https。 现在我正在玩耍,为一个子域创build一个新的ssl证书,因为certbot正在用http访问.well-known目录,所以失败了。 当这个请求被redirect到https时,它不起作用。 我的想法是从redirect排除这个隐藏的目录。 为了testing,我把一个简单的文本放入.well-known / acme-challenge /目录。 每次即时通讯对这个文件的请求仍然redirect。 这是我目前的nginxconfiguration: server { listen 80 default_server; #listen [::]:80 default_server; server_name test.de www.test.de; root /var/www/html; location /.well-known/acme-challenge { root /var/www/html; allow all; } location / { return 301 https://test.de$request_uri; } } server { listen 443 ssl default_server; listen [::]:443 ssl default_server; include snippets/ssl-test.de.conf; include snippets/ssl-params.conf; […]

如何添加适用于所有传入请求的位置块?

我希望任何传入的HTTP请求(不pipe域名)以特定path开始发送到本地服务器。 例如: location /special/path/ { proxy_pass http://127.0.0.1:8000/; } 如果给定的域名没有匹配的server {}块,Nginx会将请求路由到default_server 。 但是我需要将请求始终路由到本地服务器, 即使find匹配的server {}块也是如此 。 我将如何去做这件事? 奖励:如果有一种方法可以在当前设置了default_server的server {}之外执行此操作,那就太棒了。