Nginx是一款高性能的HTTP和反向代理服务器,在Ubuntu系统上配置Nginx非常常见。下面我将提供一个详细的配置实例分析。
在Ubuntu上安装Nginx非常简单:
sudo apt update
sudo apt install nginx
安装完成后,Nginx会自动启动。你可以通过以下命令检查状态:
sudo systemctl status nginx
Nginx的主要配置文件位于:
- /etc/nginx/nginx.conf
- 主配置文件
- /etc/nginx/sites-available/
- 可用的虚拟主机配置
- /etc/nginx/sites-enabled/
- 已启用的虚拟主机配置(通常是sites-available中文件的符号链接)
- /etc/nginx/conf.d/
- 额外的配置文件目录
下面是一个简单的静态网站配置示例(通常放在/etc/nginx/sites-available/example.com
):
server {
listen 80;
server_name example.com www.example.com;
root /var/www/example.com/html;
index index.html index.htm;
location / {
try_files $uri $uri/ =404;
}
access_log /var/log/nginx/example.com.access.log;
error_log /var/log/nginx/example.com.error.log;
}
listen 80
: 监听80端口(HTTP)server_name
: 指定域名root
: 网站文件根目录index
: 默认索引文件location /
: 处理所有请求的规则try_files
: 尝试按顺序查找文件access_log
和error_log
: 指定日志文件位置创建符号链接到sites-enabled目录并测试配置:
sudo ln -s /etc/nginx/sites-available/example.com /etc/nginx/sites-enabled/
sudo nginx -t # 测试配置语法
sudo systemctl reload nginx # 重新加载配置
现代网站应该使用HTTPS。以下是配置示例:
server {
listen 80;
server_name example.com www.example.com;
return 301 https://$server_name$request_uri;
}
server {
listen 443 ssl;
server_name example.com www.example.com;
ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;
# SSL优化配置
ssl_protocols TLSv1.2 TLSv1.3;
ssl_prefer_server_ciphers on;
ssl_ciphers "EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH";
ssl_ecdh_curve secp384r1;
ssl_session_cache shared:SSL:10m;
ssl_session_tickets off;
ssl_stapling on;
ssl_stapling_verify on;
root /var/www/example.com/html;
index index.html index.htm;
location / {
try_files $uri $uri/ =404;
}
}
sudo apt install certbot python3-certbot-nginx
sudo certbot --nginx -d example.com -d www.example.com
Nginx常被用作反向代理,下面是一个将请求代理到本地Node.js应用的例子:
server {
listen 80;
server_name api.example.com;
location / {
proxy_pass http://localhost:3000;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection 'upgrade';
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;
proxy_cache_bypass $http_upgrade;
}
}
Nginx可以配置为负载均衡器:
upstream backend {
server backend1.example.com weight=5;
server backend2.example.com;
server backend3.example.com;
# 可选:定义负载均衡方法
# least_conn; # 最少连接
# ip_hash; # IP哈希
}
server {
listen 80;
server_name loadbalanced.example.com;
location / {
proxy_pass http://backend;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
}
使用sudo nginx -t
测试配置,它会指出具体的错误位置。
确保Nginx用户(通常是www-data
)对网站目录有读取权限:
sudo chown -R www-data:www-data /var/www/example.com
sudo chmod -R 755 /var/www/example.com
检查HTTPS配置,确保没有在HTTPS块中又重定向到HTTPS。
确保root
指令指向正确的目录,并且该目录存在。
启用Gzip压缩:
gzip on;
gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript;
调整工作进程:
worker_processes auto; # 在nginx.conf中设置
启用缓存:
location ~* \.(jpg|jpeg|png|gif|ico|css|js)$ {
expires 30d;
add_header Cache-Control "public, no-transform";
}
调整缓冲区大小:
client_body_buffer_size 10K;
client_header_buffer_size 1k;
client_max_body_size 8m;
large_client_header_buffers 2 1k;
通过以上配置实例,你可以在Ubuntu上搭建和优化Nginx服务器,满足各种Web服务需求。根据实际应用场景,可以进一步调整和扩展这些配置。