Nginx 配置
1 2 3 4 5 6 7 8 9 10 | content_by_lua ‘’; set_by_lua $c "return ngx.var.a + ngx.var.b" ; rewrite_by_lua "ngx.var.a = ngx.var.a + 1" ; access_by_lua ' if ngx.var.remote_addr == "127.0.0.1" then return end ngx.exit(403) '; |
虚拟主机
server_name .a.org; #可以用正则表达式 *.a.org 跟a.org 可以合并为 .a.org 多个域名并排,空格分隔
显示目录或文件
autoindex on;< br >autoindex_exact_size on; #显示文件大小< br >autoindex_localtime on; #显示最后修改时间< br > |
压缩返回
gzip on; gzip_types text/plain application/x-javascript text/css application/xml; #指定类型文件压缩 gzip_min_length 1000; gzip_buffers 4 8k; |
默认读取的文件
index index.php index.html index.htm; |
设置网站的根目录
root /var/nginx/avdata/public_html; #确保有目录权限x |
默认请求处理
location / { #默认的处理 try_files $uri $uri/ index.php?$args; } |
默认处理的匹配方式 配置的$uri 即不包含参数以/开头的请求地址
~ 区分大小写正则匹配
~* 不区分大小写正则匹配
^~ 如果匹配之后将停止往下检查
= 完全相等
例:
location ~ \.php$ {#匹配.php的请求
try_files $uri $uri/ index.php?$args;#$args显示传递GET参数
include fastcgi.conf;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php; }
location = index.php {#匹配index.php ,非页面上输入index.php的请求.页面上index.php的请求为/index.php include fastcgi_params; fastcgi_pass 127.0.0.1:9000; fastcgi_param SCRIPT_FILENAME $document_root/$fastcgi_script_name;#$fastcgi_script_name默认跟$uri相同 fastcgi_index index.php; } |
静态文件超时
location ~* \.(jpg|jpeg|gif|png|js|css)$ {#匹配指定结尾文件
access_log off;#错误不记录日志
expires 30d;#客户端缓存30天
}
通过规则:
{}里面的设置不影响外部的设置,
location / { root /var/nginx/a/public_html/hi; }
外部的设置影响{}里的设置,所以可以在虚拟主机的外部定义root,全局共用
IP监听
listen 80; #IP:端口 或者直接端口,监听全部IP
简单重写代替
# 最后一个是处理方式或者是处理地址,之前的为文件或目录< br ># 找不到对应文件或目录将用最后一个作为请求代替< br ># $uri/ 以/结尾表示目录< br >try_files $uri $uri/ index.php;#文件或目录找不到的时候用index.php代替$uri |
别名
location /i/ { alias /good/; #但$uri为/i/*规则的时候,$uri将被修改为/good/* 不能用于正则表达式内的location }
禁止访问
location ~ \.db$ {#符合.db 结尾的文件禁止访问
deny all;
}
指定IP访问
location ~ \.db$ {#本机可访问.db 结尾的文件
allow 127.0.0.1;
}
其他权限:
location /hello { allow 127.0.0.1; deny all; echo "hello world"; }
传输速度限制
#超过传输指定文件后限制速度< br >limit_rate_after 1m; limit_rate 100k; |
404错误记录
log_not_found off;# 404错误不记录 |
定义静态404错误
location / {//找不到文件定义状态吗 try_files $uri $uri/ =404; } location ~ \.php$ { fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; fastcgi_intercept_errors on;//让错误显示到前端 fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; } error_page 404 /404.html;//自定义404
规则:
~ 为区分大小写匹配
~* 为不区分大小写匹配
!~和!~*分别为区分大小写不匹配及不区分大小写不匹配
-f和!-f用来判断是否存在文件
-d和!-d用来判断是否存在目录
-e和!-e用来判断是否存在文件或目录
-x和!-x用来判断文件是否可执行
#ReWrite语法
last - 基本上都用这个Flag。
break - 中止Rewirte,不在继续匹配
redirect - 返回临时重定向的HTTP状态302
permanent - 返回永久重定向的HTTP状态301
一些核心及内置变量:http://nginx.org/cn/docs/http/ngx_http_core_module.html
附属:
一般Nginx 变量值容器的生命期是与当前请求相关联的,有特殊的。
变量是声明的,非过程的
设置变量
set $a aaa;
输出变量
echo $a;
echo "a $a;"
正常下,$都将被转义 所以 通过以下办法定义有$字符的变量
geo $do { default "$"; }
执行某个地址:
1 2 | echo_exec /bar; echo_location /bar "a=1&b=2" ; |
获得参数:
1 | $arg_* |
输出指令不能有多条
配合echo的前后
1 2 | echo_before_body "before..." ; echo_after_body "after..." ; |
处理顺序:
1 2 3 4 5 6 7 8 9 | rewrite access content (echo proxy_pass 等) index #(地址不为/弃权处理) autoindex #(地址不为/弃权处理) ngx_static find-config 。。。 try -files /file1 /file2 =403 #(挨个尝试文件是否存在) |
LUA 调用:
content_by_lua ‘ ngx.exit(403)’; set_by_lua $c "return ngx.var.a + ngx.var.b"; rewrite_by_lua "ngx.var.a = ngx.var.a + 1"; access_by_lua ' if ngx.var.remote_addr == "127.0.0.1" then return end ngx.exit(403) ';
示例:
server { listen 80; server_name xx.com www.xx.com; gzip on; gzip_types text/plain application/x-javascript text/css application/xml; gzip_min_length 1000; gzip_buffers 4 8k; root /var/www/xx/public_html/; error_page 500 502 503 504 /50x.html; location = /50x.html { root html; } location / { index index.php index.html index.htm; try_files $uri $uri/ index.php?$args; } location ~ \.(ico|gif|bmp|jpg|jpeg|png|swf|js|css) { expires 7d; try_files $uri $uri/ index.php?$args; } location ~ \.php$ { fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; fastcgi_param KOHANA_ENV "TESTING"; fastcgi_param PHP_VALUE "open_basedir=$document_root:/tmp/"; include fastcgi_params; } location = index.php { include fastcgi_params; fastcgi_pass 127.0.0.1:9000; fastcgi_param SCRIPT_FILENAME $document_root/index.php; fastcgi_param KOHANA_ENV "TESTING"; fastcgi_param PHP_VALUE "open_basedir=$document_root:/tmp/"; fastcgi_index index.php; } }
一般情况下记得把PHP某些函数禁用
disable_functions = exec,passthru,shell_exec,system,proc_open,popen,parse_ini_file,show_source,dl
disable_classes = perl
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构