一篇文章搞懂Nginx常见模块用法
|
admin
2025年12月10日 21:31
本文热度 13
|
server { listen80; server_name a.com;
location /xx { root /etc/nginx/html/a/; }
location /yy { alias /etc/nginx/html/b/; }}
当访问http://a.com/xx/时,实际访问的物理路径是/etc/nginx/html/a/xx/,路径是拼接root配置值和URL完整路径;
当访问http://a.com/yy/时,实际访问的物理路径就是/etc/nginx/html/b/,alias直接替换了URL中的路径;
Nginx 的 location 是核心配置模块之一,用于匹配客户端请求的 URL 路径,并为匹配的请求分配特定的处理逻辑(如静态文件访问、反向代理、重定向等)。
#匹配优先级从高到低:
=, ^~, ~和~*, 不带符号
location = / { }
location ^~ /static/ { }
location ~ \.(gif|jpg|png)$ { }
location ~* \.png$ {}
location !~ \.xhtml$ {}
location / {}
location @ 内部服务跳转,由@定义的区段客户段不能访问,示例:server { listen 80; server_name a.com; error_page 404 @error_404; location @error_404 { return418'418 page'; }}
配置允许哪些ip访问网站,http、server、location块都支持配置:
[root@vm conf.d]# cat 80.confserver { listen 80; server_name a.com; root /opt/nginx/html; allow 10.68.0.0/16; allow 1.1.1.1; allow 127.0.0.1; #允许127访问 deny all;}[root@vm conf.d]# curl 127.0.0.1a.com[root@vm conf.d]# vi 80.conf[root@vm conf.d]# nginx -s reload[root@vm conf.d]# cat 80.confserver { listen 80; server_name a.com; root /opt/nginx/html; allow 10.68.0.0/16; allow 1.1.1.1;#allow 127.0.0.1; #禁止127访问 deny all;}[root@vm conf.d]# curl 127.0.0.1<html><head><title>403 Forbidden</title></head><body><center><h1>403 Forbidden</h1></center><hr><center>nginx/1.20.1</center></body></html>[root@vm conf.d]#
allow 127.0.0.1的时候curl正常访问页面;
注释掉allow 127.0.0.1 会匹配到最后的deny all,再次访问时返回403拒绝;
给没有认证功能的页面增加用户认证,认证通过后才能访问
yum install httpd-tools -y #安装密码生成工具#生成用户,首次使用-c新建文件,再次生成用户不需要-c选项[root@ngx ~]# htpasswd -cb /etc/nginx/conf.d/.htpasswd #生成密码usera 123456Adding password for user usera[root@ngx ~]# htpasswd -b /etc/nginx/conf.d/.htpasswd userb 654321Adding password for user userb[root@ngx ~]# cat /etc/nginx/conf.d/.htpasswdusera:$apr1$pzJPXhxl$pGiLeeYyu6TV6qkbA8QUI0userb:$apr1$qPBN8LMF$Y08BnzlK4tlvrZMJJ7NfV0#修改密码文件权限[root@ngx ~]# chown nginx.nginx /etc/nginx/conf.d/.htpasswd[root@ngx conf.d]# chmod 600 /etc/nginx/conf.d/.htpasswd[root@ngx conf.d]# cat 80.confserver { listen 80; server_name a.com; root /opt/nginx/html; auth_basic "Enter passwd"; auth_basic_user_file /etc/nginx/conf.d/.htpasswd;}
访问时会出现如图用户名密码输入框,输入正常后即可正常访问
[root@vm conf.d]# cat 80.confserver { listen 80; server_name a.com; root /opt/nginx/html; error_page 404 /40x.html; location = /40x.html { root /opt/nginx/html/; }}[root@vm conf.d]# echo "this is 404 page" >/opt/nginx/html/40x.html[root@vm conf.d]# nginx -s reload[root@vm conf.d]# curl 127.0.0.1/ha.htmlthis is 404 page[root@vm conf.d]#
[root@vm conf.d]# cat 80.confserver { listen 80; server_name a.com; root /opt/nginx/html; error_page 404 =302 /index302.html;
}[root@vm conf.d]# echo "302 html" > /opt/nginx[root@vm conf.d]# nginx -s reload[root@vm conf.d]# curl 127.0.0.1/ht.html302 html[root@vm conf.d]#
[root@vm conf.d]# cat 80.confserver { listen 80; server_name a.com; root /opt/nginx/html; error_log /opt/nginx/logs/a.com.error.log; error_page 404 =302 /index302.html;
}[root@vm conf.d]# nginx -s reload[root@vm conf.d]# curl 127.0.0.1/ht.html302 html[root@vm conf.d]# cat /opt/nginx/logs/access.log a.com.error.log error.log[root@vm conf.d]# cat /opt/nginx/logs/a.com.error.log2025/11/2004:18:43 [error] 12112#0: *15 open() "/opt/nginx/html/ht.html" failed (2: No such file or directory), client: 127.0.0.1, server: a.com, request: "GET /ht.html HTTP/1.1", host: "127.0.0.1"
[root@vm conf.d]# cat 80.confserver { listen 80; server_name a.com; root /opt/nginx/html; keepalive_requests 1000; #一次长链接允许请求资源的最大数量,如果链接请求次数达到配置值会断开; keepalive_timeout 120; #保持空闲链接的时长,超时退出}
[root@vm conf.d]# cat 80.confserver { listen 80; server_name a.com; root /opt/nginx/html/download/; autoindex on; #开启目录索引 autoindex_exact_size off; #关闭精确显示文件大小 autoindex_localtime on;#显示本地时间 charset utf8; #支持中文 limit_rate 2048k; #限制下载速度}
阅读原文:原文链接
该文章在 2025/12/11 9:23:29 编辑过