2022年从零开始,用一篇博客掌握 nginx 的初级配置
off999 2025-01-02 18:15 26 浏览 0 评论
当 nginx 安装之后,默认的配置如下所示(数据来源为宝塔自动生成),本篇博客重点介绍的是配置虚拟机相关内容,即 server 块配置项。 server 块的指令主要用于设置主机和端口, location 块用于匹配网页路径,一个 http 块可以包含多个 server 。
基础配置
server
{
listen 80;
server_name www.域名.com;
index index.php index.html index.htm default.php default.htm default.html;
root /www/wwwroot/目录;
#SSL-START SSL相关配置,请勿删除或修改下一行带注释的404规则
#error_page 404/404.html;
#SSL-END
#ERROR-PAGE-START 错误页配置,可以注释、删除或修改
#error_page 404 /404.html;
#error_page 502 /502.html;
#ERROR-PAGE-END
#PHP-INFO-START PHP引用配置,可以注释或修改
include enable-php-73.conf;
#PHP-INFO-END
#REWRITE-START URL重写规则引用,修改后将导致面板设置的伪静态规则失效
include /www/server/panel/vhost/rewrite/域名伪静态文件.conf;
#REWRITE-END
#禁止访问的文件或目录
location ~ ^/(\.user.ini|\.htaccess|\.git|\.svn|\.project|LICENSE|README.md)
{
return 404;
}
#一键申请SSL证书验证目录相关设置
location ~ \.well-known{
allow all;
}
location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$
{
expires 30d;
error_log /dev/null;
access_log /dev/null;
}
location ~ .*\.(js|css)?$
{
expires 12h;
error_log /dev/null;
access_log /dev/null;
}
access_log /www/wwwlogs/域名.log;
error_log /www/wwwlogs/域名.error.log;
}
复制代码
这里面要学习的第一个内容,就是各个配置的含义。
# 在配置文件中表示注释。
配置清单
虚拟主机监听的端口号
listen 80;
复制代码
绑定的域名
server_name www.域名.com;
复制代码
多个域名用空格分隔。
配置默认页
index index.php index.html index.htm default.php default.htm default.html;
复制代码
监听URL
# 匹配 URL
location / {
# 访问路径,可以是相对路径或者绝对路径
root html;
index index.html index.htm;
}
复制代码
这里比较重要,尤其是 location 后面的规则,语法如下:
location [=|~|~*|^~] /uri/ {
# 编写代码
}
复制代码
- =:精确匹配;
- ~ :区分大小写匹配(可用正则),与之对应的是 !~;
- ~*:不区分大小写的匹配(可用正则),与之对应的是 !~*;
- ^~:以某个字符串开头;
- /:通配符,任何请求都会匹配到;
基于上述内容,再去观察上述默认配置,就能读懂了
# 当访问 user.ini,htaccess 等文件时,直接返回 404
location ~ ^/(\.user.ini|\.htaccess|\.git|\.svn|\.project|LICENSE|README.md)
{
return 404;
}
# 匹配 .well-known
location ~ \.well-known{
allow all;
}
# 匹配以 gif,jpg,jpeg等后缀结尾的文件
location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$
{
expires 30d;
error_log /dev/null;
access_log /dev/null;
}
# 匹配以 js,css 结尾的文件
location ~ .*\.(js|css)?$
{
expires 12h;
error_log /dev/null;
access_log /dev/null;
}
复制代码
可以在匹配到的规则内容中,编写防盗链代码
valid_referers none blocked 域名1.cn 域名1.cn;
# 如果是
if ($invalid_referer) {
# 防盗链
rewrite ^/ http://$host/logo.png;
}
复制代码
其中 valid_referers 语法如下
valid_referers [none|blocked|server_names]
复制代码
- none:默认值,表示无 referer 值的情况;
- blocked:表示 referer 值被防火墙进行伪装;
- server_names:域名列表,可以使用通配符 * 号。
如果匹配到规则,那么会将 $invalid_referer 变量设置为 1。
这里又延伸出 nginx 全局变量相关内容,这个还有有必要记忆一下的,基于它们可以实现很多逻辑。 假设请求的地址为 http://www.baidu.com:88/test1/test2/a.php?ttt=123
- $args:请求中的参数,与 $query_string 一致,即 ttt=123;
- $content_length:请求头中的Content-Length 字段;
- $content_type:请求头中的Content-Type字段;
- $document_root:当前请求在root指令中指定的值;
- $document_uri:与 $uri 一致,请求 URI,即 http://www.baidu.com:88/test1/test2/a.php;
- $host:请求中的主机头字段,即 www.baidu.com;
- $http_user_agent:客户端浏览器的相关信息;
- $http_cookie:客户端cookie信息;
- $limit_rate:限制连接速率;
- $request_body_file:客户端请求主体信息的临时文件名;
- $request_method:请求方法;
- $remote_addr:客户端的ip地址;
- $remote_port:客户端的端口号;
- $remote_user:客户端用户名称;
- $request_filename:当前请求的文件路径;
- $request_uri:包含请求参数的原始 URI,不包含主机名,即 /test1/test2/a.php
- $status:请求状态码,成功是200;
- $http_referer:页面来源;
- $server_name:请求服务器名;
- $server_port:请求=的服务器端口号;
于此同时我们还可以在 nginx 请求中判断请求的是否是文件,目录等内容。
- -f 和 !-f 用来判断文件;
- -d 和 !-d 用来判断目录;
- -e 和 !-e 用来判断文件或目录;
- -x 和 !-x 用来判断文件是否可执行。
上述还有一个参数 rewrite 表示重写规则,它可以使用 nginx 提供的全局变量或我们设置的变量,结合正则表达式和标志位实现 url 重写与重定向。 rewrite 只能放在 server{} , location{} , if{} 中。 rewrite 只能对域名后边的除去传递的参数外的字符串起作用,例如 http://www.aaaa.com/a/b/c.php?id=1&user=hihell 只对 /a/b/c.php 重写。 rewrite 语法格式如下:
rewrite regex replacement [flag];
复制代码
上述语法中的 flag 有如下取值:
- last:表示完成 rewrite,一般写在 server{} 和 if{} 中;
- break:停止执行当前虚拟主机的后续rewrite指令集;
- redirect :返回302临时重定向,地址栏会显示跳转后的地址;
- permanent:返回301永久重定向,地址栏会显示跳转后的地址。
其中还有一个需要特别注意就是 $1 , $2 ,这些都是前面正则小括号里面的对应内容。
举例如下:
location / {
# 匹配到 ^/news/([0-9]{5})\.html$,转换为 /news_$1
rewrite '^/news/([0-9]{5})\.html#39; /news_$1;
}
复制代码
上述内容表示匹配到 /news/123456.html 的请求,重写为 /news_123456 。
其它可用配置
单连接请求上限次数
server
{
keepalive_requests 120;
}
复制代码
允许的域名与禁止的域名
server
{
location [=|~|~*|^~] /uri/ {
deny www.baidu.com; # 拒绝的域名
allow 111.111.111.111; # 允许的 ip
}
}
复制代码
反向代理设置
location / {
proxy_pass http://localhost:8080;
proxy_set_header Host $host:$server_port;
}
复制代码
其中 proxy_pass 参数表示设置被代理服务器的 URL 和端口; proxy_set_header 设置 header 参数,例如 Host , X-Real-IP , X-Forwarded-For
设置错误页 error_page 参与的语法规则为
error_page 404 502 = @fetch;
location @fetch {
access_log /logs/face.log log404;
rewrite ^(.*)$ http://域名:端口/face.jpg redirect;
}
复制代码
server 块中的其它配置
- ssl_certificate:
- ssl_certificate_key:
- ssl_session_timeout:
- expires 2h:缓存2小时;
- listen 443 ssl:在https访问的时候,需要证书验证;
nginx 80重定向443 命令如下:
server {
listen 80;
server_name 域名1.com 域名2.com;
return 301 https://$http_host$request_uri;
}
server{
listen 443 ssl;
server_name 域名1.com 域名2.com;
}
复制代码
其中有 2 个参数需要说明 $http_host , $request_uri ,其中 $request_uri 在前文已经进行了说明,表示除 host 以外的其它部分。 $http_host 参数存在几个类似值:
- $host:浏览器请求的 IP,无端口;
- $http_host:浏览器请求的 IP/端口号,端口存在即显示;
- $proxy_host:被代理服务的 IP/端口号,80端口不显示,其它显示。
请求日志 error_log 参数用于设置日志存储位置。
访问控制 allow/deny 在每个块中都可以设置多个 allow , deny ,分别表示允许或禁止某个 IP 或IP 段访问。
return命令 该命令语法格式为
return code ;
复制代码
该命令用于结束规则的执行并返回状态码给客户端。
Set命令 该命令语法格式为
set $variable value ; # 默认值:none
复制代码
该命令用于定义一个变量,并给变量赋值。变量的值可为文本,变量及二者联合。
作者:梦想橡皮擦
链接:https://juejin.cn/post/7058618130666520590
来源:稀土掘金
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
- 上一篇:Nginx的安装、配置和安全加固教程
- 下一篇:Nginx常用配置
相关推荐
- 大文件传不动?WinRAR/7-Zip 入门到高手,这 5 个技巧让你效率翻倍
-
“这200张照片怎么传给女儿?微信发不了,邮箱附件又超限……”62岁的张阿姨对着电脑犯愁时,儿子只用了3分钟就把照片压缩成一个文件,还教她:“以后用压缩软件,比打包行李还方便!”职场人更懂这...
- 电脑解压缩软件推荐——7-Zip:免费、高效、简洁的文件管理神器
-
在日常工作中,我们经常需要处理压缩文件。无论是下载软件包、接收文件,还是存储大量数据,压缩和解压缩文件都成为了我们日常操作的一部分。而说到压缩解压软件,7-Zip绝对是一个不可忽视的名字。今天,我就来...
- 设置了加密密码zip文件要如何打开?这几个方法可以试试~
-
Zip是一种常见的压缩格式文件,文件还可以设置密码保护。那设置了密码的Zip文件要如何打开呢?不清楚的小伙伴一起来看看吧。当我们知道密码想要打开带密码的Zip文件,我们需要用到适用于Zip格式的解压缩...
- 大文件想要传输成功,怎么把ZIP文件分卷压缩
-
不知道各位小伙伴有没有这样的烦恼,发送很大很大的压缩包会受到限制,为此,想要在压缩过程中将文件拆分为几个压缩包并且同时为所有压缩包设置加密应该如何设置?方法一:使用7-Zip免费且强大的文件管理工具7...
- 高效处理 RAR 分卷压缩包:合并解压操作全攻略
-
在文件传输和存储过程中,当遇到大文件时,我们常常会使用分卷压缩的方式将其拆分成多个较小的压缩包,方便存储和传输。RAR作为一种常见的压缩格式,分卷压缩包的使用频率也很高。但很多人在拿到RAR分卷...
- 2个方法教你如何删除ZIP压缩包密码
-
zip压缩包设置了加密密码,每次解压文件都需要输入密码才能够顺利解压出文件,当压缩包文件不再需要加密的时候,大家肯定想删除压缩包密码,或是忘记了压缩包密码,想要通过删除操作将压缩包密码删除,就能够顺利...
- 速转!漏洞预警丨压缩软件Winrar目录穿越漏洞
-
WinRAR是一款功能强大的压缩包管理器,它是档案工具RAR在Windows环境下的图形界面。该软件可用于备份数据,缩减电子邮件附件的大小,解压缩从Internet上下载的RAR、ZIP及其它类...
- 文件解压方法和工具分享_文件解压工具下载
-
压缩文件减少文件大小,降低文件失效的概率,总得来说好处很多。所以很多文件我们下载下来都是压缩软件,很多小伙伴不知道怎么解压,或者不知道什么工具更好,所以今天做了文件解压方法和工具的分享给大家。一、解压...
- [python]《Python编程快速上手:让繁琐工作自动化》学习笔记3
-
1.组织文件笔记(第9章)(代码下载)1.1文件与文件路径通过importshutil调用shutil模块操作目录,shutil模块能够在Python程序中实现文件复制、移动、改名和删除;同时...
- Python内置tarfile模块:读写 tar 归档文件详解
-
一、学习目标1.1学习目标掌握Python内置模块tarfile的核心功能,包括:理解tar归档文件的原理与常见压缩格式(gzip/bz2/lzma)掌握tar文件的读写操作(创建、解压、查看、过滤...
- 使用python展开tar包_python拓展
-
类Unix的系统,打包文件经常使用的就是tar包,结合zip工具,可以方便的打包并解压。在python的标准库里面有tarfile库,可以方便实现生成了展开tar包。使用这个库最大的好处,可能就在于不...
- 银狐钓鱼再升级:白文件脚本化实现GO语言后门持久驻留
-
近期,火绒威胁情报中心监测到一批相对更为活跃的“银狐”系列变种木马。火绒安全工程师第一时间获取样本并进行分析。分析发现,该样本通过阿里云存储桶下发恶意文件,采用AppDomainManager进行白利...
- ZIP文件怎么打开?2个简单方法教你轻松搞定!
-
在日常工作和生活中,我们经常会遇到各种压缩文件,其中最常见的格式之一就是ZIP。ZIP文件通过压缩数据来减少文件大小,方便我们进行存储和传输。然而,对于初学者来说,如何打开ZIP文件可能会成为一个小小...
- Ubuntu—解压多个zip压缩文件.zip .z01 .z02
-
方法将所有zip文件放在同一目录中:zip_file.z01,zip_file.z02,zip_file.z03,...,zip_file.zip。在Zip3.0版本及以上,使用下列命令:将所有zi...
- 如何使用7-Zip对文件进行加密压缩
-
7-Zip是一款开源的文件归档工具,支持多种压缩格式,并提供了对压缩文件进行加密的功能。使用7-Zip可以轻松创建和解压.7z、.zip等格式的压缩文件,并且可以通过设置密码来保护压缩包中的...
你 发表评论:
欢迎- 一周热门
- 最近发表
- 标签列表
-
- python计时 (73)
- python安装路径 (56)
- python类型转换 (93)
- python进度条 (67)
- python吧 (67)
- python的for循环 (65)
- python格式化字符串 (61)
- python静态方法 (57)
- python列表切片 (59)
- python面向对象编程 (60)
- python 代码加密 (65)
- python串口编程 (77)
- python封装 (57)
- python写入txt (66)
- python读取文件夹下所有文件 (59)
- python操作mysql数据库 (66)
- python获取列表的长度 (64)
- python接口 (63)
- python调用函数 (57)
- python多态 (60)
- python匿名函数 (59)
- python打印九九乘法表 (65)
- python赋值 (62)
- python异常 (69)
- python元祖 (57)