标签: nginx

Nginx:请求不带扩展名的文件

如何在没有扩展名的情况下在 nginx 服务器上请求 html 页面?

即:example.com/about 应该返回 example.com/about.html。对于所有 html 页面都应该如此。

我有一些类似的事情:

try_files $uri $uri.html;
index  index.html;
Run Code Online (Sandbox Code Playgroud)

这是有效的,但是访问 example.com/ 会导致 403 Forbidden:

2015/01/20 19:26:11 [error] 32618#0: *373061 access forbidden by rule
Run Code Online (Sandbox Code Playgroud)

访问不存在的页面 (example.com/bla) 会导致重定向循环:

2015/01/20 19:26:57 [error] 32620#0: *373065 rewrite or internal redirection cycle while internally redirecting to "/bla.html.html.html.html.html.html.html.html.html.html.html"
Run Code Online (Sandbox Code Playgroud)

更新了完整的 nginx 配置:

server {
    listen          [::]:80;
    server_name     example.com;

    access_log  /var/log/nginx/access.log;
    error_log   /var/log/nginx/error.log;
    root   /var/www/example/;
    try_files $uri $uri.html /index.html =404;
    index  index.html;
    expires max;
    autoindex off;

    # deny access to .htaccess files, …
Run Code Online (Sandbox Code Playgroud)

nginx

1
推荐指数
1
解决办法
1万
查看次数

NGINX 提取 url 的最后一部分

在我的配置文件中,我需要将网址的最后部分提取到变量中以在重定向中使用,例如如果网址是http://www.example.com/question,我需要“question”以便我可以设置重写一下。请问我该怎么做?

nginx

1
推荐指数
1
解决办法
3万
查看次数

Nginx 反向代理给缓存 MISS

我已经为域配置了 nginx 反向代理。但是,当我测试使用时curl,它显示缓存 MISS。

curl -I http://www.mixtapemadness.com
HTTP/1.1 200 OK
Access-Control-Allow-Origin: *
Cache-Control: max-age=0, no-cache, no-store, must-revalidate
Content-Type: text/html; charset=UTF-8
Date: Wed, 23 Nov 2016 13:58:23 GMT
Expires: Wed, 11 Jan 1984 05:00:00 GMT
Pragma: no-cache
Server: nginx/1.8.1
Set-Cookie: ci_session=2fb702c0f6a7528e1198db89b1df85142ee1bfad; 
expires=Wed, 23-Nov-2016 15:58:21 GMT; Max-Age=7200; path=/; HttpOnly
Vary: Accept-Encoding
X-Proxy-Cache: MISS
Connection: keep-alive
Run Code Online (Sandbox Code Playgroud)

我的nginx.conf

user nginx;
worker_processes 8;
error_log /var/log/nginx/error.log;
pid /var/run/nginx.pid;
events {
    worker_connections 1024;
}
http {

log_format rt_cache '$remote_addr - $upstream_cache_status [$time_local]  
                    '"$request" …
Run Code Online (Sandbox Code Playgroud)

nginx proxy

1
推荐指数
1
解决办法
4769
查看次数

子目录中 nginx 反向代理后面的 Jenkins

我正在努力在 nginx 后面的子目录中设置 Jenkins。有 2 个应用程序在本地主机上运行。其中之一是 jenkins,可以通过访问 foo.com/jenkins 进行访问。另一个应用程序位于 foo.com/ 上。

对詹金斯的请求不能有前缀/jenkins/,因此我重写(删除)它。但是,尽管 jenkins 的初始页面已加载,但所有资源(js、css...)都丢失了,并且网站看起来很丑陋。原因似乎是请求没有 jenkins 前缀并被重定向到其他应用程序(请参阅屏幕截图中的链接)。

如何将请求从詹金斯页面路由到正确的处理程序?

server {
    listen 80;
    server_name foo.com;  

    # jenkins server in subdir:      
    location ^~ /jenkins/ {
       rewrite ^/jenkins(.*) /$1 break;
       proxy_pass http://127.0.0.1:9500/;
    }
    # main app:
    location / {
        proxy_pass http://127.0.0.1:8081;
    }
}
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

nginx reverse-proxy jenkins

1
推荐指数
1
解决办法
9779
查看次数

是否可以只为 NGINX 上的一台主机启用 proxy_protocol?

假设我有两台主机,a.example.com并且b.example.com只希望启用位于负载均衡器后面的主机(proxy_protocol用于直接运行状况检查)。尝试了以下设置但出现错误。a.example.comb.example.com

a.example.com

server {
    listen 80 proxy_protocol;
    listen 443 proxy_protocol ssl;

    server_name a.example.com;

    location / {
        proxy_pass http://localhost:8443;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection 'upgrade';
        proxy_set_header Host $host;
        proxy_set_header X-Forwarded-For $proxy_protocol_addr;
        proxy_cache_bypass $http_upgrade;
    }

    ssl_certificate /etc/letsencrypt/live/a.example.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/a.example.com/privkey.pem;
}
Run Code Online (Sandbox Code Playgroud)

b.example.com

server {
    listen 80;

    server_name b.example.com;

    location /healthcheck {
        proxy_pass http://localhost:8443;
        access_log off;
    }
}
Run Code Online (Sandbox Code Playgroud)

错误

2019/08/06 17:40:50 [error] 10488#10488: *12 broken header: "GET /healthcheck HTTP/1.1
Host: b.example.com
Connection: keep-alive
Cache-Control: …
Run Code Online (Sandbox Code Playgroud)

nginx

1
推荐指数
1
解决办法
2804
查看次数

$request_uri 部分的 limit_req 不同

我想为 php-fpm 配置不同的速率限制。

我想要:

  1. 静态文件没有限制,
  2. PHP 请求有限制,
  3. PHP 请求/ admin /.+有不同的限制。

我对实现点 3 有问题。现在我测试:

limit_req_zone $binary_remote_addr zone=php:10m rate=2r/s;
limit_req_zone $binary_remote_addr zone=admin:10m rate=9r/s;

server {
    location / {
        try_files $uri $uri/ /index.php?$args;
    }
    limit_req_status 429;
# limitng works, server return 404
    location ~ /admin/ {limit_req zone=admin...}

    location ~ [^/]\.php(/|$) {
        limit_req zone=php burst=9 delay=4;
#limit_req not allowed here
        if($request_uri ~ /admin) {limit_req zone=admin...}
#not update limits (lower)
        location ~ ^/admin/ {limit_req zone=admin...}
#negative matching returns index.php content
        location location …
Run Code Online (Sandbox Code Playgroud)

rewrite nginx rate-limiting

1
推荐指数
1
解决办法
2126
查看次数

如何使 fastcgi_pass 使用 localhost:port

这可能不会像我想要的那样正确,请耐心等待。

我有一个运行 php 7.2 和 nginx 的 ubuntu 服务器。我们有一个反向代理设置,因此 laravel 服务器使用内部 IP (AWS)。安装可以运行,但我们需要修改路由。

对于 laravel,所有路由都以/api/. 我们的反向代理将流量转发/v2/api/到私有 IP laravel 服务器。这可行,但我们得到了404。laravel 服务器访问日志显示/v2/api未找到。伟大的。我需要做一些改变。我需要路由/v2/api//api/. 如何?设置:

server_name <private-ip-address>;

location / {
    try_files $uri $uri/ /index.php?$query_string;
}

location ~ \.php$ {
    include snippets/fastcgi-php.conf;
    fastcgi_pass unix:/run/php/php7.2-fpm.sock;
}

location /v2/api/ {
  # proxy_pass http://localhost:9000/$2;
}

location ~ /\.ht {
    deny all;
}
Run Code Online (Sandbox Code Playgroud)

对于我想做的事情,可以更改fastcgi_pass为使用localhost:9000吗?端口9000未被使用。然后proxy_pass按上面的方法使用?

nginx

1
推荐指数
1
解决办法
2万
查看次数

尽管在响应标头中从服务器发送了 no-cache、no-store、must-revalidate,但我的浏览器仍然显示缓存页面

我们页面上的内容不断变化,因此我们不希望浏览器缓存页面或显示缓存页面或我们的用户。但是,尽管在响应标头中从服务器发送了 no-cache、no-store、must-revalidate,但浏览器仍然显示缓存的页面。\n这确实令人沮丧。我们有成千上万的用户,他们都在阅读旧新闻!

\n

我们正在使用客户端 js 模板(handlebars js)从服务器读取数据并渲染页面,但浏览器不断向用户显示最后渲染的页面,而 Handlebars 既不从服务器读取新数据,也不更新内容。可能出什么问题了?

\n

如果我按shift重新加载,那么浏览器确实会显示新内容,但我不能要求或期望我的用户每次加载我们的页面时都这样做。

\n

有人可以提供有用的指点吗?

\n

200 好

\n

响应头:

\n
Accept-Ranges: bytes\nCache-Control: no-cache, no-store, must-revalidate\nConnection: keep-alive\nContent-Length: 12229\nContent-Type: text/html\nDate: Fri, 14 Aug 2020 09:08:10 GMT\nETag: "1e9602c3ddcf81c338fa4194c61ea035"\nLast-Modified: Fri, 07 Aug 2020 12:38:22 GMT\nServer: nginx/1.19.1\nStrict-Transport-Security: max-age=0; includeSubDomains\nVary: Origin, Access-Control-Request-Headers, Access-Control-Request-Method\nx-amz-request-id: tx00000000000004b9d2b06-005f36547a-ab8956-ams3b\nx-rgw-object-type: Normal\n
Run Code Online (Sandbox Code Playgroud)\n

请求标头:

\n
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9\nAccept-Encoding: gzip, deflate\nAccept-Language: en-GB,en-US;q=0.9,en;q=0.8\nCache-Control: max-age=0\nConnection: keep-alive\nCookie: _ga=GA1.1.709310680.1596978913; _gid=GA1.1.2045080055.1596978913\nUpgrade-Insecure-Requests: 1\nUser-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.125 Safari/537.36\n(index):48 [Violation] Avoid using document.write(). https://developers.google.com/web/updates/2016/08/removing-document-write\n
Run Code Online (Sandbox Code Playgroud)\n

\xe2\x80\x8b\n我们正在执行 …

nginx cache http-headers

1
推荐指数
1
解决办法
9801
查看次数

服务器维护登陆页面 - 可以在 HTTP 上吗?

我们在 ruby​​ on Rails 上运行两个会计系统,有时我们必须执行导致停机的维护任务,或者只是因为停机更容易完成。ia 本周我们将整套 lxc 容器从 HDD 迁移到一组 SSD。会计系统通过 HTTPS 访问 fakturabank.no 和 snotr.no

我们正在运行一台 LXD 服务器,并有一个专门用于服务维护页面的容器,即静态 html 页面。我们计划将其转移到另一台服务器,以便我们可以在重新启动后保持它。现在要启用维护页面,我们启动维护容器并使用会计软件容器的 IP 地址编辑网络计划设置,然后关闭会计软件容器并netplan apply && systemctl nginx restart在维护容器上运行。

在会计系统上,我们有来自 LetsEncrypt 的 SSL 证书,到目前为止,维护容器仅接受 HTTP 上的流量,因为它没有任何 SSL 证书。这导致我们开始维护时系统中的用户将不会被重定向到维护页面。

我想让它尽可能简单以启用维护模式。维护页面只会显示信息,所以我不知道在 https 上有什么好处。
我如何配置 nginx 来做到这一点?这是一个愚蠢的想法吗?
我的用户会收到此页面不安全的警告吗?

另一个想法:(
每当我想使用它时,我是否必须添加到我的程序中以在维护服务器上请求新的共享证书?

maintenance nginx

1
推荐指数
1
解决办法
199
查看次数

位置从域重定向到 nginx 中的另一个域

我想将地点重定向 play.example.com/u/<user id>example.com/u/<user id>play.example.com/b/<game id>重定向至play.example2.net/b/<game id>

同时也有网站选项(我在同一域上托管的 webroot 和 api)。我怎样才能做到这一点?

nginx

1
推荐指数
1
解决办法
2150
查看次数