nginx 配置指南
Nginx是一款高性能的开源Web服务器和反向代理服务器,以其高并发处理能力、低资源消耗和灵活的配置系统而闻名,本文将详细介绍如何配置Nginx,涵盖从基础到高级的各个方面,包括安装、基本配置、虚拟主机设置、负载均衡、HTTPS配置等。

一、Nginx 简介
Nginx(engine x)是一个高性能的HTTP服务器和反向代理服务器,它以其高并发处理能力、低内存占用和灵活的配置系统被广泛应用于各种网站和应用中,Nginx不仅能够提供静态和动态内容,还能有效地进行负载均衡和SSL终止。
二、安装 Nginx
1. 使用包管理器安装(以Ubuntu为例)
- sudo apt update
- sudo apt install nginx
2. 使用源码编译安装
- wget http://nginx.org/download/nginx<version>.tar.gz
- tar zxvf nginx<version>.tar.gz
- cd nginx<version>
- ./configure
- make
- sudo make install
三、基本配置
Nginx的主要配置文件是nginx.conf
,通常位于/etc/nginx/
或/usr/local/nginx/conf/
目录下,以下是一个简单的配置示例:
- 全局配置
- user wwwdata;
- worker_processes auto;
- error_log /var/log/nginx/error.log;
- pid /run/nginx.pid;
- events块
- events {
- worker_connections 1024;
- }
- http块
- http {
- include /etc/nginx/mime.types;
- default_type application/octetstream;
- # log格式定义
- log_format main '$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/access.log main;
- sendfile on;
- tcp_nopush on;
- tcp_nodelay on;
- keepalive_timeout 65;
- types_hash_max_size 4096;
- # include mime.types文件
- include /etc/nginx/mime.types;
- default_type application/octetstream;
- # include所有配置文件
- include /etc/nginx/conf.d/*.conf;
- # 配置一个基本的server块
- server {
- listen 80 default_server;
- listen [::]:80 default_server;
- server_name localhost;
- root /usr/share/nginx/html;
- # 配置index文件
- index index.html index.htm;
- # 错误页配置
- error_page 500 502 503 504 /50x.html;
- location = /50x.html {
- root /usr/share/nginx/html;
- }
- # 静态文件位置
- location / {
- try_files $uri $uri/ =404;
- }
- }
- }
四、虚拟主机配置
通过在nginx.conf
中添加多个server
块,可以配置多个虚拟主机,每个server
块可以监听不同的端口或IP地址,以下是一个虚拟主机配置的示例:
- server {
- listen 80;
- server_name example.com;
- location / {
- root /var/www/example;
- index index.html index.htm;
- }
- error_page 500 502 503 504 /50x.html;
- location = /50x.html {
- root /var/www/example;
- }
- }
五、负载均衡配置
Nginx支持多种负载均衡策略,如轮询、加权轮询和IP哈希等,以下是一个使用轮询策略的负载均衡配置示例:

- http {
- upstream backend {
- server backend1.example.com weight=5;
- server backend2.example.com;
- }
- server {
- listen 80;
- server_name loadbalancer.example.com;
- location / {
- proxy_pass http://backend;
- proxy_set_header Host $host;
- proxy_set_header XRealIP $remote_addr;
- proxy_set_header XForwardedFor $proxy_add_x_forwarded_for;
- proxy_set_header XForwardedProto $scheme;
- }
- }
- }
六、SSL/TLS 配置
为了使网站支持HTTPS,需要在Nginx中配置SSL证书,需要购买或生成SSL证书,并将其放置在服务器上,以下是一个HTTPS配置示例:
- server {
- listen 443 ssl;
- server_name example.com;
- ssl_certificate /path/to/your/certificate.crt;
- ssl_certificate_key /path/to/your/private.key;
- ssl_session_cache shared:SSL:1m;
- ssl_session_timeout 10m;
- ssl_ciphers HIGH:!aNULL:!MD5;
- ssl_prefer_server_ciphers on;
- location / {
- root /var/www/html;
- index index.html index.htm;
- }
- }
七、高级配置与优化
1. Gzip 压缩
启用Gzip压缩可以减少传输的数据量,提高网页加载速度,在http
块中添加以下配置:
- http {
- gzip on;
- gzip_types text/plain application/xml text/css application/javascript;
- gzip_min_length 1000;
- gzip_proxied expired nocache nostore private auth;
- gzip_disable "MSIE [16]\.";
- }
2. 缓存控制
通过设置缓存头,可以控制浏览器和中间代理的缓存行为,缓存静态文件30天:
- location ~* \.(jpg|jpeg|png|gif|ico|css|js)$ {
- expires 30d;
- }
3. 访问控制

可以使用allow
和deny
指令限制特定IP地址的访问:
- location /admin {
- allow 192.168.1.0/24;
- deny all;
- }
八、重启与重新加载配置
每次修改配置文件后,需要重启或重新加载Nginx以使更改生效:
- sudo systemctl restart nginx
- or
- sudo nginx s reload
九、常见排错方法
检查配置文件语法:使用nginx t
命令检查配置文件是否有语法错误。
查看日志文件:检查Nginx的错误日志(默认在/var/log/nginx/error.log
)和访问日志(默认在/var/log/nginx/access.log
),找出问题所在。
权限问题:确保Nginx有权限读取所需的文件和目录。