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 <