如何在没有扩展名的情况下在 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) 在我的配置文件中,我需要将网址的最后部分提取到变量中以在重定向中使用,例如如果网址是http://www.example.com/question,我需要“question”以便我可以设置重写一下。请问我该怎么做?
我已经为域配置了 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 后面的子目录中设置 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)
假设我有两台主机,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) 我想为 php-fpm 配置不同的速率限制。
我想要:
/ 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) 这可能不会像我想要的那样正确,请耐心等待。
我有一个运行 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按上面的方法使用?
我们页面上的内容不断变化,因此我们不希望浏览器缓存页面或显示缓存页面或我们的用户。但是,尽管在响应标头中从服务器发送了 no-cache、no-store、must-revalidate,但浏览器仍然显示缓存的页面。\n这确实令人沮丧。我们有成千上万的用户,他们都在阅读旧新闻!
\n我们正在使用客户端 js 模板(handlebars js)从服务器读取数据并渲染页面,但浏览器不断向用户显示最后渲染的页面,而 Handlebars 既不从服务器读取新数据,也不更新内容。可能出什么问题了?
\n如果我按shift重新加载,那么浏览器确实会显示新内容,但我不能要求或期望我的用户每次加载我们的页面时都这样做。
\n有人可以提供有用的指点吗?
\n200 好
\n响应头:
\nAccept-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\nRun Code Online (Sandbox Code Playgroud)\n请求标头:
\nAccept: 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\nRun Code Online (Sandbox Code Playgroud)\n\xe2\x80\x8b\n我们正在执行 …
我们在 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 来做到这一点?这是一个愚蠢的想法吗?
我的用户会收到此页面不安全的警告吗?
另一个想法:(
每当我想使用它时,我是否必须添加到我的程序中以在维护服务器上请求新的共享证书?
我想将地点重定向
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)。我怎样才能做到这一点?