您的位置:首页 > 路由器知识路由器知识
2024年Nginx小白入门到精通:从配置到性能优化的100个实用技巧
2026-04-17人已围观
2024年Nginx小白入门到精通:从配置到性能优化的100个实用技巧
一、Nginx到底是个啥?新手必懂的基础知识
你可能经常听程序员大佬们提起Nginx,但它到底是个什么东西呢?简单来说,Nginx就像是你家小区的保安亭,所有外来访客(网络请求)都得先经过它,它决定谁能进、谁不能进,以及该往哪个方向走。专业点说,Nginx是一个高性能的HTTP和反向代理服务器,也是一个IMAP/POP3/SMTP代理服务器。
为什么要用Nginx呢?想象一下,如果你的网站突然火了,一下子来了1000个人访问,直接让你的应用服务器处理这么多请求,它很可能会"罢工"。这时候Nginx就派上用场了,它可以把这些请求分散到多个服务器上,就像超市开了多个收银台,不会让所有人都挤在一个地方。
Nginx最牛的地方在于它的"饭量小,干活快"——占用资源少,但能处理成千上万的并发连接。有数据显示,Nginx在普通服务器上就能轻松处理每秒5万以上的并发请求,这也是为什么国内外很多大网站都在用它,比如淘宝、京东、Netflix等。
二、手把手教你安装Nginx:比装微信还简单
2.1 Windows系统安装步骤
1. 首先去Nginx官网(http://nginx.org/)下载最新稳定版,注意看清楚是32位还是64位,别下错了版本。
2. 下载完成后是个压缩包,把它解压到你想放的地方,比如`C:\nginx`。记住这个路径,后面要用。
3. 打开命令提示符,切换到Nginx目录:`cd C:\nginx`。
4. 输入`start nginx`启动服务,这时候你可能看不到任何窗口弹出来,别慌,Nginx是在后台运行的。
5. 打开浏览器,输入`http://localhost`,如果看到"Welcome to nginx!"的页面,恭喜你安装成功了!
2.2 Linux系统安装步骤(以Ubuntu为例)
1. 打开终端,输入`sudo apt update`更新软件源。
2. 输入`sudo apt install nginx`安装Nginx,中间会问你"是否继续",输入y然后回车。
3. 安装完成后,Nginx会自动启动。你可以输入`systemctl status nginx`来检查状态,如果看到绿色的"active (running)"就说明一切正常。
4. 同样在浏览器输入服务器的IP地址,就能看到Nginx的欢迎页面了。
2.3 Mac系统安装步骤
Mac用户最简单的方法是用Homebrew:
1. 打开终端,输入`brew install nginx`。
2. 安装完成后,输入`nginx`启动服务。
3. 验证方法和上面一样,浏览器访问`http://localhost:8080`(注意Mac版默认端口是8080,不是80)。
三、核心配置文件详解:nginx.conf就这么简单
Nginx的所有功能都靠配置文件来实现,最重要的就是`nginx.conf`。这个文件就像是Nginx的"大脑",告诉它应该怎么工作。不同系统的配置文件位置 slightly 不同:
- Windows:在你解压的Nginx目录下,比如`C:\nginx\conf\nginx.conf`
- Linux:通常在`/etc/nginx/nginx.conf`
- Mac:用Homebrew安装的话在`/usr/local/etc/nginx/nginx.conf`
3.1 设置请求的根目录:root指令
`root`指令就像是给Nginx指了个方向:"嘿,用户要访问的文件都放在这个文件夹里,你去那儿找!"
举个例子:
```nginx
server {
listen 80;
server_name example.com;
root /var/www/example.com;
}
```
这表示当有人访问`example.com`时,Nginx会到`/var/www/example.com`这个目录下去找对应的文件。比如访问`example.com/index.html`,Nginx就会返回`/var/www/example.com/index.html`这个文件。
小技巧:设置根目录时,最好使用绝对路径,别用相对路径,不然Nginx可能会找不到文件。
3.2 定义路径别名:alias指令
`alias`和`root`有点像,但又不一样。如果说`root`是"整个网站的根目录",那`alias`就是"某个特定路径的别名"。
举个例子:
```nginx
location /images/ {
alias /var/pictures/;
}
```
当用户访问`example.com/images/photo.jpg`时,Nginx会实际去`/var/pictures/photo.jpg`找文件,而不是`/var/www/example.com/images/photo.jpg`。注意`alias`后面的路径最后一定要加斜杠`/`,不然可能会出错。
3.3 反向代理功能:proxy_pass指令
这是Nginx最强大的功能之一。简单说,反向代理就是"帮别人干活"——当有人请求Nginx时,它不自己处理,而是把请求转发给其他服务器,然后把结果返回给用户。
比如你有个Tomcat服务器运行在8080端口,想让用户通过80端口访问:
```nginx
location / {
proxy_pass http://localhost:8080;
}
```
这样用户访问`example.com`时,Nginx会偷偷把请求转发给`localhost:8080`,用户根本感觉不到中间多了一层Nginx。
3.4 前端路由支持:try_files指令
现在很多前端框架(比如Vue、React)都用History模式的路由,这时候刷新页面就会404。`try_files`就是来解决这个问题的。
```nginx
location / {
try_files $uri $uri/ /index.html;
}
```
这句话的意思是:先看看有没有`$uri`这个文件,没有的话看看有没有`$uri`这个目录,都没有的话就返回`/index.html`。这样刷新页面时就会交给前端路由处理,不会出现404错误了。
3.5 默认索引文件:index指令
当用户访问一个目录时,Nginx会自动寻找索引文件。`index`指令就是告诉它要找哪些文件。
```nginx
location / {
root /var/www/example.com;
index index.html index.htm index.php;
}
```
这表示当访问`example.com/`时,Nginx会先找`index.html`,如果没有就找`index.htm`,再没有就找`index.php`,都没有的话才返回403错误。
3.6 URL重写:rewrite指令
`rewrite`可以帮你把一个URL变成另一个URL,就像快递地址变更一样。比如你把网站的`/news`目录改名为`/articles`,但又不想让老用户的收藏失效:
```nginx
rewrite ^/news/(.)$ /articles/$1 permanent;
```
这样当用户访问`example.com/news/2024.html`时,会自动跳转到`example.com/articles/2024.html`,浏览器地址栏也会显示新的URL。
3.7 直接返回状态码:return指令
有时候你想直接告诉用户"这个页面不存在"或者"你没有权限访问",这时候就用`return`指令:
```nginx
location /admin/ {
return 403 "抱歉,你没有权限访问这个页面";
}
location /old-page.html {
return 301 /new-page.html;
}
```
3.8 添加响应头:add_header指令
这个指令可以给HTTP响应添加一些额外的头信息,比如设置CORS(跨域资源共享)规则,或者安全相关的头。
```nginx
location /api/ {
add_header Access-Control-Allow-Origin ;
add_header Access-Control-Allow-Methods GET,POST,OPTIONS;
proxy_pass http://api-server:3000;
}
```
3.9 基本身份认证:auth_basic指令
如果你想给网站的某个目录加个密码保护,不让随便什么人都访问,可以用这个指令:
```nginx
location /secret/ {
auth_basic "请输入密码";
auth_basic_user_file /etc/nginx/.htpasswd;
}
```
然后你需要用`htpasswd`命令生成密码文件:`htpasswd -c /etc/nginx/.htpasswd username`,系统会提示你输入密码。
四、新手避坑清单:这些错误90%的人都会犯
1. 配置文件修改后忘记重启Nginx:修改了配置文件一定要重启或重新加载Nginx才能生效!Linux/Mac用`nginx -s reload`,Windows在命令行进入Nginx目录执行`nginx -s reload`。
2. 端口被占用问题:启动Nginx时如果提示"bind() to 0.0.0.0:80 failed",说明80端口被其他程序占用了(比如Apache或IIS)。解决办法:要么停掉占用端口的程序,要么修改Nginx的监听端口。
3. 配置文件语法错误:Nginx对配置文件的语法要求很严格,少个分号、括号不匹配都会导致启动失败。修改完配置文件后,先用`nginx -t`检查语法,显示"nginx: configuration file /etc/nginx/nginx.conf test is successful"才算没问题。
4. root和alias分不清:这两个指令很容易搞混。简单记:`root`是"根目录 + location路径",`alias`是"直接替换location路径"。
5. 权限问题:Nginx进程需要读取网站文件的权限,如果权限不足,会返回403错误。解决办法:确保Nginx运行的用户(通常是www-data或nginx)对网站目录有读取权限。
6. 日志文件过大:Nginx的访问日志和错误日志会不断变大,如果不处理,可能会占满磁盘空间。解决办法:配置日志轮转(logrotate)或者设置日志级别为warn以上。
7. 未限制并发连接:如果不对单个IP的并发连接数做限制,可能会遭遇DoS攻击。解决办法:使用limit_conn模块限制单个IP的连接数。
8. 缓存配置不当:要么完全没配置缓存,导致服务器压力大;要么缓存时间设置太长,导致用户看不到最新内容。解决办法:合理设置`expires`指令,对静态资源设置较长缓存,对动态内容不缓存或设置短缓存。
9. 未启用gzip压缩:不启用gzip会导致网页加载速度变慢,浪费带宽。解决办法:在http块添加`gzip on;`启用压缩。
10. 直接在主配置文件修改:很多新手喜欢直接修改nginx.conf,但这样不利于维护和升级。正确做法是在`/etc/nginx/conf.d/`目录下创建单独的配置文件,然后在主配置文件用`include`指令包含进来。
五、性能优化秘籍:让你的Nginx飞起来
5.1 启用gzip压缩
这是最简单也最有效的优化手段之一。启用gzip后,Nginx会把HTML、CSS、JavaScript等文本文件压缩后再发送给用户,就像把衣服压缩打包后再邮寄,能显著减少传输的数据量。
在`nginx.conf`的http块中添加:
```nginx
gzip on; 开启gzip压缩
gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript; 需要压缩的文件类型
gzip_min_length 1k; 文件大小超过1k才压缩
gzip_comp_level 5; 压缩级别,1-9,级别越高压缩率越高但消耗CPU越多
gzip_buffers 4 16k; 压缩缓冲区大小
gzip_http_version 1.1; 支持的HTTP版本
gzip_vary on; 向客户端表明是否使用了gzip压缩
```
配置完成后,重启Nginx,用浏览器的开发者工具查看网络请求,Response Headers中如果有`Content-Encoding: gzip`就说明配置成功了。
5.2 配置浏览器缓存
合理的缓存策略可以让用户第二次访问你的网站时,直接从本地读取部分内容,不用重新下载,既加快了访问速度,又减轻了服务器负担。
```nginx
location ~ \.(jpg|jpeg|png|gif|ico|css|js)$ {
expires 30d; 这些文件缓存30天
add_header Cache-Control "public, max-age=2592000";
}
location ~ \.(html|htm)$ {
expires 1h; HTML文件缓存1小时
add_header Cache-Control "public, max-age=3600";
}
```
注意:对于经常变动的文件,缓存时间不要设置太长;对于不常变动的静态资源(如图片、CSS、JS),可以设置较长的缓存时间。
5.3 优化连接数和工作进程
Nginx的性能很大程度上取决于工作进程数和每个进程的连接数设置。一般来说,工作进程数应该等于或略大于CPU核心数。
```nginx
worker_processes auto; 自动设置为CPU核心数
events {
worker_connections 10240; 每个工作进程的最大连接数
multi_accept on; 允许一个工作进程同时接受多个连接
use epoll; 使用epoll事件模型(Linux系统推荐)
}
```
`worker_connections`的设置要考虑到系统的打开文件限制,可以用`ulimit -n`命令查看当前限制,如果太低,需要修改`/etc/security/limits.conf`文件提高限制。
5.4 启用TCP复用
启用TCP复用可以让Nginx在一个TCP连接上处理多个HTTP请求,减少TCP握手和挥手的开销。
```nginx
http {
tcp_nopush on; 启用TCP NOPUSH选项,在数据包大小达到一定程度才发送
tcp_nodelay on; 禁用Nagle算法,减少延迟
keepalive_timeout 65; 长连接超时时间,单位秒
keepalive_requests 100; 一个长连接最多处理的请求数
}
```
5.5 配置FastCGI缓存(针对PHP网站)
如果你的网站用PHP编写,配置FastCGI缓存可以显著提高性能,减轻PHP-FPM的压力。
```nginx
http {
定义FastCGI缓存
fastcgi_cache_path /var/run/nginx-fastcgi-cache levels=1:2 keys_zone=PHP_CACHE:100m inactive=60m;
fastcgi_cache_key "$scheme$request_method$host$request_uri";
server {
...其他配置
location ~ \.php$ {
fastcgi_pass unix:/var/run/php/php7.4-fpm.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
启用FastCGI缓存
fastcgi_cache PHP_CACHE;
fastcgi_cache_valid 200 302 10m; 200和302状态码缓存10分钟
fastcgi_cache_valid 404 1m; 404状态码缓存1分钟
fastcgi_cache_use_stale error timeout invalid_header updating http_500 http_502 http_503 http_504;
fastcgi_cache_bypass $cookie_nocache $arg_nocache $arg_comment;
fastcgi_no_cache $cookie_nocache $arg_nocache $arg_comment;
}
}
}
```
六、10个实用小技巧:让你看起来像Nginx高手
1. 快速查看Nginx版本和编译参数:`nginx -V`(大写V)可以显示Nginx的版本和编译时的参数,这在排查模块相关问题时非常有用。
2. 测试配置文件而不重启:修改配置文件后,先用`nginx -t`测试语法是否正确,避免重启后Nginx无法启动。
3. 优雅重启Nginx:`nginx -s reload`可以在不中断服务的情况下重新加载配置文件,比`systemctl restart nginx`更友好。
4. 查看Nginx进程占用的资源:`ps aux | grep nginx`可以查看Nginx进程的CPU和内存占用情况,`top -p
5. 临时关闭访问日志:如果需要临时排查问题又不想让日志干扰,可以用`nginx -s reopen`重新打开日志文件,然后删除旧日志。或者在配置文件中设置`access_log off;`临时关闭访问日志。
6. 使用map指令定义变量:map指令可以根据客户端信息定义变量,比如根据User-Agent判断是否是移动设备:
```nginx
map $http_user_agent $is_mobile {
default 0;
~mobile 1;
}
```
然后在location中就可以用`if ($is_mobile) { ... }`做不同处理。
7. 限制请求速率:防止爬虫或恶意用户过快地请求服务器:
```nginx
limit_req_zone $binary_remote_addr zone=RATE_LIMIT:10m rate=10r/s;
location / {
limit_req zone=RATE_LIMIT burst=20 nodelay;
}
```
这表示限制每个IP每秒最多10个请求,最多允许20个突发请求。
8. 根据文件类型设置不同的缓存策略:
```nginx
location ~ \.(jpg|jpeg|png|gif|ico|css|js)$ {
expires 30d;
add_header Cache-Control "public, max-age=2592000";
}
location ~ \.(html|htm)$ {
expires 1h;
add_header Cache-Control "public, max-age=3600";
}
location ~ \.(php|jsp)$ {
expires 0;
add_header Cache-Control "no-cache, no-store, must-revalidate";
}
```
9. 设置自定义错误页面:默认的Nginx错误页面太简陋,你可以自定义更友好的错误页面:
```nginx
error_page 404 /404.html;
error_page 500 502 503 504 /50x.html;
location = /404.html {
root /usr/share/nginx/html;
internal; 只允许内部访问,不允许用户直接访问
}
location = /50x.html {
root /usr/share/nginx/html;
internal;
}
```
10. 启用HTTP/2:HTTP/2比HTTP/1.1性能更好,支持多路复用等特性。启用方法很简单,在listen指令后加上`http2`:
```nginx
server {
listen 443 ssl http2; 注意需要先配置SSL
...其他SSL配置
}
```
注意HTTP/2通常需要配合SSL使用,所以你需要先配置HTTPS。
七、5个常见问题解决:遇到问题不用慌
问题1:Nginx启动失败,提示"bind() to 0.0.0.0:80 failed (98: Address already in use)"
这是最常见的问题,意思是80端口被其他程序占用了。
解决步骤:
1. 找出占用80端口的程序:`sudo lsof -i :80` 或 `sudo netstat -tulpn | grep :80`。
2. 根据输出结果,结束占用端口的程序:`sudo kill -9 <进程ID>`。
3. 如果是Apache占用了端口,可以彻底禁用它:`sudo systemctl disable --now apache2`。
4. 如果你想保留占用端口的程序,可以修改Nginx的监听端口,比如改成8080:`listen 8080;`。
问题2:访问网站时出现403 Forbidden错误
403错误通常是权限问题,Nginx没有权限访问网站文件。
解决步骤:
1. 检查Nginx配置文件中的网站根目录是否正确。
2. 检查网站目录的权限:`ls -ld /var/www/example.com`。
3. 检查网站文件的权限:`ls -l /var/www/example.com`。
4. 确保Nginx运行的用户(通常是www-data或nginx)对网站目录和文件有读取权限。
5. 修复权限命令:`sudo chown -R www-data:www-data /var/www/example.com`(更改所有者)和`sudo chmod -R 755 /var/www/example.com`(设置权限)。
6. 另外,如果目录中没有index文件,也会导致403错误,确保目录下有index.html或其他索引文件。
问题3:Nginx配置了反向代理,但访问时出现502 Bad Gateway错误
502错误表示Nginx无法连接到后端服务器。
解决步骤:
1. 检查后端服务器是否正常运行:`curl http://localhost:8080`(假设后端服务在8080端口)。
2. 如果后端服务没运行,先启动后端服务。
3. 如果后端服务正常运行,检查Nginx配置中的`proxy_pass`是否正确,比如IP、端口是否写错。
4. 检查后端服务是否只监听了localhost,如果是,从外部是无法访问的,需要修改后端服务监听0.0.0.0。
5. 检查防火墙是否阻止了Nginx访问后端服务的端口。
6. 查看Nginx错误日志获取更多信息:`tail -f /var/log/nginx/error.log`。
问题4:启用HTTPS后,浏览器提示证书不安全
这通常是因为使用了自签名证书或者证书配置不正确。
解决步骤:
1. 如果你是测试环境,可以在浏览器中手动信任自签名证书(不推荐生产环境使用自签名证书)。
2. 生产环境应该使用可信机构颁发的证书,比如Let's Encrypt提供免费证书。
3. 检查SSL配置是否正确,确保`ssl_certificate`指向正确的证书文件,`ssl_certificate_key`指向私钥文件。
4. 确保证书包含完整的证书链,如果缺少中间证书,也会导致浏览器提示不安全。
5. 可以使用SSL测试工具(如SSL Labs的SSL Test)检查证书配置是否正确。
问题5:Nginx访问日志中出现大量404错误,但实际页面存在
这通常是URL大小写敏感或路径配置问题导致的。
解决步骤:
1. Linux系统下,文件和目录名是大小写敏感的,Windows和Mac默认不敏感。如果你的网站是从Windows迁移到Linux的,可能会出现这个问题。
2. 检查请求的URL和实际文件路径的大小写是否一致。
3. 检查Nginx配置中的`location`指令是否正确,特别是使用正则表达式时。
4. 如果使用了`rewrite`指令,检查重写规则是否正确,是否有循环重写的情况。
5. 启用Nginx的debug日志,获取更详细的信息:在`error_log`指令中添加`debug`级别,然后重启Nginx。
八、长期使用体验:Nginx真的有那么神吗?
我用Nginx已经有8年了,从最开始的个人博客到后来公司的生产环境,Nginx一直是我的首选Web服务器。说实话,它给我的最大印象就是"稳如老狗"——一旦配置好,基本可以忘了它的存在,很少出问题。
记得有一次,我们的网站突然流量暴涨,服务器负载一下子上去了。当时我有点慌,赶紧登录服务器一看,Nginx还在稳稳地工作,只是后端的应用服务器有点扛不住。我马上在Nginx上启用了缓存,又简单配置了一下负载均衡,把流量分散到备用服务器上,几分钟就稳住了局面。要是当时用的是其他Web服务器,可能就没这么容易解决了。
Nginx的文档非常完善,社区也很活跃,基本上你遇到的任何问题,都能在网上找到解决方案。而且它的模块非常丰富,你能想到的Web服务器功能,它几乎都能实现,从简单的静态文件服务到复杂的负载均衡、反向代理、缓存、压缩、安全防护等等。
当然,Nginx也不是完美的。它的配置文件虽然强大,但对新手来说还是有点复杂,需要花时间学习。而且有些高级功能需要手动编译模块,不像Apache那样可以直接通过apt或yum安装模块。但话说回来,这些小缺点和它的优点比起来,根本不值一提。
总的来说,Nginx是一个"你给它多少资源,它就给你多少回报"的软件。如果你只是简单用用,它很简单;如果你想深入优化,它也有足够的深度让你折腾。对于任何需要搭建Web服务的场景,我都会毫不犹豫地推荐Nginx。
九、新手必学的5个高级功能
9.1 负载均衡:让多台服务器一起干活
当你的网站流量越来越大,一台服务器扛不住的时候,负载均衡就派上用场了。Nginx可以把请求分发到多台服务器上,提高网站的并发处理能力和可用性。
基本配置示例:
```nginx
http {
定义上游服务器组
upstream backend_servers {
server backend1.example.com weight=5; weight表示权重,数字越大,被分配到的请求越多
server backend2.example.com;
server 192.168.0.100:8080 backup; backup表示这是备用服务器,只有其他服务器都不可用时才启用
server 192.168.0.101:8080 max_fails=3 fail_timeout=30s; 失败3次后,30秒内不再使用这台服务器
}
server {
listen 80;
server_name example.com;
location / {
proxy_pass http://backend_servers; 转发请求到上游服务器组
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}
}
```
9.2 SSL/TLS配置:让网站更安全
现在的网站都应该启用HTTPS,不仅更安全,还能提高搜索引擎排名。下面是一个比较安全的SSL配置:
```nginx
server {
listen 80;
server_name example.com www.example.com;
return 301 https://$host$request_uri; 把HTTP请求重定向到HTTPS
}
server {
listen 443 ssl http2;
server_name example.com www.example.com;
SSL证书配置
ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;
ssl_trusted_certificate /etc/letsencrypt/live/example.com/chain.pem;
SSL优化配置
ssl_protocols TLSv1.2 TLSv1.3; 只支持安全的TLS协议版本
ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384;
ssl_prefer_server_ciphers on;
ssl_session_cache shared:SSL:10m; 启用SSL会话缓存
ssl_session_timeout 10m; SSL会话超时时间
ssl_session_tickets on; 启用会话票据
ssl_stapling on; 启用OCSP Stapling
ssl_stapling_verify on; 验证OCSP Stapling响应
resolver 8.8.8.8 8.8.4.4 valid=300s; DNS解析器,用于OCSP Stapling
resolver_timeout 5s;
HSTS配置,告诉浏览器总是使用HTTPS访问
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;
其他安全相关的响应头
add_header X-Content-Type-Options nosniff;
add_header X-Frame-Options SAMEORIGIN;
add_header X-XSS-Protection "1; mode=block";
网站内容配置
location / {
root /var/www/example.com;
index index.html;
}
}
```
9.3 URL重写高级技巧:实现复杂的URL跳转
URL重写不仅可以实现简单的跳转,还能实现很多复杂的功能,比如伪静态、隐藏文件扩展名等。
示例1:实现伪静态URL(把`/article.php?id=123`变成`/article/123.html`)
```nginx
rewrite ^/article/(\d+)\.html$ /article.php?id=$1 last;
```
示例2:隐藏PHP文件扩展名(访问`/about`实际上访问`/about.php`)
```nginx
location / {
try_files $uri $uri/ $uri.php$is_args$args;
}
```
示例3:根据用户设备跳转到不同页面
```nginx
location / {
if ($http_user_agent ~ "(mobile|android|iphone|ipad|ipod)") {
rewrite ^/$ /mobile.html break;
}
桌面用户继续访问原来的页面
}
```
9.4 安全防护:抵御常见的Web攻击
Nginx可以通过一些配置来增强网站的安全性,抵御常见的Web攻击。
示例1:防止SQL注入和XSS攻击
```nginx
location / {
过滤SQL注入关键字
if ($request_uri ~ "union.select.\(") { return 403; }
if ($request_uri ~ "union.all.select.") { return 403; }
if ($request_uri ~ "concat.\(") { return 403; }
过滤XSS攻击关键字
if ($request_uri ~ "