Nginx服务器基本的模块配置和使用全攻略
一、Nginx简介与安装
Nginx简介
Nginx是一款高性能的HTTP和反向代理服务器,以其稳定性、丰富的功能集(如负载均衡、静态文件服务以及反向代理等)和低系统资源消耗而闻名,它被广泛应用于各种规模的Web网站和企业中。
安装Nginx
(1)使用包管理器安装(以Ubuntu为例)
打开终端,更新包列表:
sudo apt update
安装Nginx:
sudo apt install nginx
启动Nginx并设置开机自启:
sudo systemctl start nginx sudo systemctl enable nginx
(2)编译安装(适用于需要定制功能的用户)
安装依赖项:
sudo apt-get install build-essential libpcre3 libpcre3-dev zlib1g zlib1g-dev libssl-dev
下载Nginx源码:
wget http://nginx.org/download/nginx-<version>.tar.gz tar -zxvf nginx-<version>.tar.gz cd nginx-<version>
配置、编译和安装:
./configure --prefix=/usr/local/nginx --with-http_ssl_module make sudo make install
启动Nginx:
/usr/local/nginx/sbin/nginx
二、Nginx配置详解
Nginx配置文件结构
Nginx的主配置文件通常位于/etc/nginx/nginx.conf
或/usr/local/nginx/conf/nginx.conf
,配置文件由多个指令组成,分为全局块、server块、location块和upstream块等部分。
2. 全局配置(global block)
全局配置包含影响整个Nginx服务器运行的配置参数,例如worker进程数、错误日志路径等。
示例:
worker_processes auto; events { worker_connections 1024; }
Server块配置
Server块用于配置虚拟主机,可以指定监听端口、服务器名称、日志文件等。
基本语法:
server { listen 80; server_name example.com; location / { root /usr/share/nginx/html; index index.html index.htm; } error_page 500 502 503 504 /50x.html; location = /50x.html { root /usr/share/nginx/html; } }
Location块配置
Location块用于匹配特定的URI,并对这些URI进行特定的配置,常用的匹配方式包括前缀匹配、精确匹配、正则表达式匹配等。
前缀匹配:
location /images/ { alias /data/winterwell/images/; }
精确匹配:
location = /exact/uri { [配置] }
正则表达式匹配:
location ~* \.(gif|jpg|png)$ { expires 30d; }
Upstream模块配置
Upstream模块用于定义一组后端服务器,支持负载均衡和故障转移,常见的负载均衡策略有轮询、加权轮询、最少连接数等。
示例:轮询
upstream backend { server backend1.example.com weight=1; server backend2.example.com; server backup1.example.com backup; # 备用服务器 } server { location / { proxy_pass http://backend; } }
三、Nginx常用模块及其配置
1. HTTP核心模块(http_core_module)
HTTP核心模块提供基础的HTTP功能,如配置监听端口、服务器名称、错误页面等。
示例:
server { listen 80; server_name example.com; root /var/www/html; }
第三方模块配置与使用
Nginx支持通过加载第三方模块来扩展其功能,以下是几个常用的第三方模块及其配置方法:
(1)ngx_http_upstream_check_module
用于检查后端服务器的状态。
安装插件:从官方或可信赖源下载插件源代码并编译。
配置示例:
upstream backend { server backend1.example.com; check interval=3000 rise=2 fall=5 timeout=1000 type=http; check_http_send "HEAD / HTTP/1.0\r \r "; check_http_expect_alive http_2xx http_3xx; }
(2) ngx_http_sticky_module
用于会话保持(sticky session)。
安装插件:从官方或可信赖源下载插件源代码并编译。
配置示例:
upstream backend { sticky; server backend1.example.com; server backend2.example.com; }
四、Nginx高级配置与优化建议
1、负载均衡配置:通过upstream模块实现多种负载均衡策略,如轮询、加权轮询、IP哈希和最少连接数,根据业务需求选择合适的策略,提高系统的可用性和响应速度,对于长连接应用,可以使用最少连接数策略;对于需要会话保持的应用,可以使用IP哈希策略,还可以结合健康检查机制,确保请求不会被分配到故障节点。
2、SSL配置:启用HTTPS来加密数据传输,保护用户数据安全,生成自签名证书或向CA申请证书,并配置在Nginx中,以下是一个基本的配置示例:
server { listen 443 ssl; server_name example.com; ssl_certificate /path/to/ssl_certificate.crt; ssl_certificate_key /path/to/private.key; ssl_protocols TLSv1 TLSv1.1 TLSv1.2; ssl_ciphers HIGH:!aNULL:!MD5; }
为了提高安全性,建议禁用不安全的协议和加密算法,并定期更新证书。
3、缓存配置:通过ngx_http_proxy_module和ngx_http_fastcgi_module模块配置缓存,减少后端服务器的压力,启用代理缓存和FastCGI缓存,可以显著提高动态内容的响应速度。
proxy_cache_path /data/nginx/cache levels=1:2 keys_zone=my_cache:10m max_size=10g inactive=60m use_temp_path=off; server { location / { proxy_pass http://backend; proxy_cache my_cache; add_header X-Cache-Status $upstream_cache_status; } }
这个配置启用了一个名为“my_cache”的共享内存缓存区,对所有通过该location的请求进行缓存处理,注意,要合理设置缓存规则和过期时间,以避免陈旧内容的问题。
4、安全配置:限制客户端请求体的大小,防止恶意请求导致拒绝服务攻击。
http { client_max_body_size 1m; }
还可以启用其他安全功能,如访问控制列表(ACL)、速率限制等,增强服务器的安全性,限制每个IP地址的请求速率:
limit_req_zone $binary_remote_addr zone=one:10m rate=1r/s; server { location / { limit_req zone=one burst=5 nodelay; } }
这个配置限制了每秒只能有一个请求,突发限制为5个请求,并且不会延迟处理其他请求,这对于防止暴力破解和流量高峰非常有效。
五、Nginx日志与监控
1、日志配置:Nginx日志分为访问日志和错误日志,默认路径分别为/var/log/nginx/access.log
和/var/log/nginx/error.log
,可以通过修改配置文件自定义日志格式和路径。
http { log_format custom '$remote_addr $remote_user [$time_local] "$request" ' '$status $body_bytes_sent "$http_referer" ' '"$http_user_agent" "$http_x_forwarded_for"'; access_log /var/log/nginx/custom_access.log custom; error_log /var/log/nginx/error.log warn; }
这个配置定义了一个名为“custom”的日志格式,并将其应用于访问日志,错误日志级别设置为warn
,只记录警告及以上级别的错误信息,通过分析日志,可以及时发现和处理异常情况。
2、监控与性能调优:使用工具如Nginx Status模块、Prometheus和Grafana进行实时监控,Status模块提供一个实时的状态页面,显示服务器的健康状态和基本统计信息。
server { location /nginx_status { stub_status on; allow 127.0.0.1; # 仅允许本地访问状态页 deny all; # 拒绝其他所有访问 } }
通过Prometheus采集指标数据,并在Grafana中创建可视化仪表盘,可以更直观地展示服务器的性能状况,定期分析性能瓶颈,调整配置参数如worker进程数、连接数上限等,以优化服务器性能。