服务器问答

求助: nginx 无法获取内置变量的值
0
2021-05-19 20:41:23
idczone

user root; worker_processes auto; pid /run/nginx.pid; include /etc/nginx/modules-enabled/*.conf; error_log /var/log/nginx/error.log;

events { worker_connections 1024; multi_accept on; } http { tcp_nodelay on; log_format main '$remote_addr - $remote_user [$time_local] $status ' '"$request" $body_bytes_sent抗投诉服务器 "$http_referer" ' '"$http_user_agent" "$http_x_forwarded_for" "$host$request_uri"'; access_log /var/log/nginx/access.log main; server { listen 80; location ~/.well-known* { root /usr/lib/mylibs/acme_tiny; #alias /usr/lib/mylibs/acme_tiny/.well-known/; autoindex on; } location ~/* { rewrite ^(.*) https://$host$request_uri break; #return 301 https://$host$request_uri; } } }

环境:Ubuntu 18.04 (谷歌云主机,minimize 版的系统,没有图形界面) 直接用 apt install nginx 安装的。

以上是配置文件。 需求:.well-known 开头的路径依旧使用 http,其余的全部跳转到 https (如果请求包含路径的话,包括路径也得带到 https 链接中)。另外,不想用代理的方式进行转发。只想用重定向完成。 https 服务是另外的一个软件提供的(可以正常访问,并且证书有效)。

目前的问题$host、$request_uri 之类的,都获取不到包括日志,所有的变量都是空的(不加自定义日志格式的话,是正常有日志的)。

各种论坛之类的都搜过了,未找到答案。先谢谢各位了。


user root;
worker_processes auto;
pid /run/nginx.pid;
include /etc/nginx/modules-enabled/*.conf;
error_log /var/log/nginx/error.log;
events {
worker_connections 1024;
multi_accept on;
}
http {
tcp_nodelay on;
log_format main '$remote_addr - $remote_user [$time_local] $status '
'"$request" $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for" "$host$request_uri"';
access_log /var/log/nginx/access.log main;
server {
listen 80;
location ~/\.well-known* {
root /usr/lib/mylibs/acme_tiny;
/usr/lib/mylibs/acme_tiny/.well-known/;
autoindex on;
}
location ~/* {
rewrite ^(.*) https://$host$request_uri break;
301 https://$host$request_uri;
}
}
}

看下是否支持 debug 模式,开 debug 看下日志,另外默认的是 combined,可以在基础上修改

恩,谢谢,好不容易编译出了带调试模式的 nginx,看了下调试日志,问题找到了。配置文件中所有的 $ 换成 \$ 就行了。不知道为什么要转义一下才能用。按理说 nginx 的配置文件读取模块应该会考虑到这个吧。
新的配置文件如下,也希望可以帮到有同样问题的小伙伴。
user root;
worker_processes auto;
pid /run/nginx.pid;
include /etc/nginx/modules-enabled/*.conf;
error_log /var/log/nginx/error.log;
events {
worker_connections 1024;
multi_accept on;
}
http {
tcp_nodelay on;
log_format main '\$remote_addr - \$remote_user [\$time_local] \$status '
'"\$request" \$body_bytes_sent "\$http_referer" '
'"\$http_user_agent" "\$http_x_forwarded_for" "\$host\$request_uri"';
access_log /var/log/nginx/access.log main;
server {
listen 80;
location ~/\.well-known* {
/usr/lib/mylibs/acme_tiny;
alias /usr/lib/mylibs/acme_tiny/.well-known/;
autoindex on;
}
location ~/* {
rewrite ^(.*) https://\$host\$request_uri break;
}
}
}


可能是使用 cat <
数据地带为您的网站提供全球顶级IDC资源
在线咨询
专属客服