Nginx

Nginx 是一款轻量级、高性能的 HTTP 和反向代理服务器,同时也提供了 IMAP/POP3/SMTP 服务。它是由俄罗斯的程序员 Igor Sysoev 为了满足俄罗斯访问量极大的 Rambler.ru 站点的高负载需求而开发的。

安装 Nginx

在 Linux 系统中,您可以使用包管理器来安装 Nginx。以下是在基于 Debian 的系统(如 Ubuntu)上安装 Nginx 的命令:

1
2
sudo apt-get update
sudo apt-get install nginx

在基于 Red Hat 的系统(如 CentOS)上安装 Nginx 的命令:

1
sudo yum install nginx

安装完成后,您可以通过运行以下命令来启动 Nginx 服务:

1
sudo systemctl start nginx

要使 Nginx 服务在系统启动时自动运行,您可以使用以下命令:

1
sudo systemctl enable nginx

了解您的需求,让我们深入探讨 Nginx 的使用和配置。以下是一个更详细的指南:

配置 Nginx

Nginx 的主配置文件通常位于 /etc/nginx/nginx.conf,而站点特定的配置文件通常位于 /etc/nginx/sites-available/ 目录下。

配置文件结构

Nginx 配置文件由多个部分组成,包括全局设置、事件模块、HTTP 设置、server 块等。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
# 全局设置
events {
worker_connections 1024;
}
http {
# 文件扩展名与文件类型映射表
include mime.types;
default_type application/octet-stream;
# 开启目录列表访问,适合开发环境
autoindex on;
# 设置日志
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;
error_log /var/log/nginx/error.log notice;
# 配置服务器
server {
listen 80;
server_name example.com;
# 位置(path)设置
location / {
root /usr/share/nginx/html;
index index.html index.htm;
}
# 错误页面
error_page 404 /404.html;
}
}

配置一个简单的网站

要配置一个简单的网站,您需要创建一个 server 块,并指定 listen 指令来监听端口,server_name 指令来指定域名,以及 location 指令来配置网站的路径和文件。

1
2
3
4
5
6
7
8
server {
listen 80;
server_name example.com;
location / {
root /var/www/example.com;
index index.html index.htm;
}
}

配置虚拟主机

要为多个域名配置同一个服务器,您可以使用多个 server 块,并为每个域名指定不同的 server_name

1
2
3
4
5
6
7
8
9
10
server {
listen 80;
server_name example.com;
# ...
}
server {
listen 80;
server_name www.example.com;
# ...
}

配置静态文件服务

如果您想要配置 Nginx 来服务静态文件,您可以使用 root 指令来指定文件路径。

1
2
3
4
5
6
7
8
server {
listen 80;
server_name example.com;
location / {
root /var/www/example.com;
index index.html index.htm;
}
}

配置反向代理

Nginx 也可以用作反向代理服务器。以下是一个配置反向代理的例子:

1
2
3
4
5
6
7
8
9
10
11
server {
listen 80;
server_name example.com;
location / {
proxy_pass http://backend;
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_pass 指令指定了后端服务器的地址。proxy_set_header 指令用于设置发送到后端服务器的 HTTP 头信息,包括原始请求的 HostX-Real-IP(客户端的真实 IP)、X-Forwarded-For(客户端的原始 IP)和 X-Forwarded-Proto(原始请求的协议)。

配置 SSL/TLS

为了安全地传输数据,您应该为您的网站配置 SSL/TLS。您可以使用 Let’s Encrypt 提供的免费证书。以下是如何为 Nginx 配置 SSL 的基本步骤:

  1. 申请证书,可使用acme.sh工具来申请证书,也可以通过网站来申请证书。

  2. 创建一个 SSL 配置文件:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    server {
    listen 443 ssl;
    server_name example.com www.example.com;
    ssl_certificate /etc/ssl/certs/example.com.crt;
    ssl_certificate_key /etc/ssl/private/example.com.key;
    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_ciphers 'ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384';
    ssl_prefer_server_ciphers on;
    location / {
    root /var/www/example.com;
    index index.html index.htm;
    }
    }

配置 HTTP/2

HTTP/2 是 HTTP 的一个新版本,它提供了更高的性能和更好的错误检测。要为 Nginx 配置 HTTP/2,您需要确保您的服务器支持 HTTP/2,并且客户端也支持 HTTP/2。
以下是如何为 Nginx 配置 HTTP/2 的基本步骤:

  1. 确保您的操作系统支持 HTTP/2。
  2. 确保您的 Nginx 版本支持 HTTP/2。
  3. 打开 nginx.conf 文件,并添加以下内容:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    http {
    # ...
    server {
    listen 443 ssl http2;
    server_name example.com;
    ssl_certificate /etc/ssl/certs/example.com.crt;
    ssl_certificate_key /etc/ssl/private/example.com.key;

    # ... (其他 SSL 配置)
    location / {
    # ...
    }
    }
    }

配置 HTTPS 重定向

为了确保所有流量都通过 HTTPS 传输,您应该将所有 HTTP 请求重定向到 HTTPS。您可以在 server 块中使用 return 指令来实现。

1
2
3
4
5
server {
listen 80;
server_name example.com;
return 301 https://$host$request_uri;
}

配置高可用性和负载均衡

为了提高网站的可靠性,您可以配置 Nginx 作为高可用性和负载均衡服务器。这通常涉及到设置多个 Nginx 实例和一个或多个后端服务器。
以下是一个简单的负载均衡配置示例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
http {
upstream backend {
server backend1.example.com;
server backend2.example.com;
server backend3.example.com;
}
server {
listen 80;
server_name example.com;
location / {
proxy_pass http://backend;
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;
}
}
}

在这个配置中,upstream 指令定义了一个后端服务器的集合,proxy_pass 指令将请求转发到这个集合中的任意一个服务器。

配置缓存

Nginx 支持在服务器端缓存静态文件,这可以提高网站的性能。以下是一个简单的缓存配置示例:

1
2
3
4
5
6
7
8
9
10
server {
listen 80;
server_name example.com;
location ~ ^/(images|css|js)/ {
root /var/www/example.com;
expires 30d;
access_log off;
add_header Cache-Control "public";
}
}

在这个配置中,location 指令用于匹配特定的 URL 模式,root 指令指定了文件路径,expires 指令设置了缓存期限,access_log 指令禁用了访问日志,add_header 指令添加了一个 Cache-Control 头,指示浏览器缓存该内容。

重启 Nginx

在修改完配置文件后,您需要重启 Nginx 服务以使更改生效。您可以使用以下命令来重启 Nginx:

1
sudo systemctl restart nginx

故障排除

如果 Nginx 服务无法启动,您可以检查日志文件 /var/log/nginx/error.log 以获取错误信息。


本站由 Natuie 使用 Stellar 1.26.8 主题创建。
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处。

本站总访问量次 | 本站总访客数人次
载入天数...载入时分秒...