nginx入门与实践

发布于:2024-06-16 ⋅ 阅读:(16) ⋅ 点赞:(0)

当谈到NGINX的入门与实践时,理解基本概念并能够应用实际场景非常重要。NGINX是一个高性能的HTTP和反向代理服务器,也可用作负载均衡器和HTTP缓存。以下是一些入门级别的NGINX实践和代码示例,帮助你开始学习和使用它。

1. 安装和基本配置

安装NGINX

首先,你需要安装NGINX。具体安装方法取决于你的操作系统,例如在Ubuntu上可以通过以下命令安装:

sudo apt update
sudo apt install nginx
启动NGINX

安装完成后,可以使用以下命令启动NGINX服务:

sudo systemctl start nginx
停止NGINX

如果需要停止NGINX服务,可以使用:

sudo systemctl stop nginx
配置文件位置

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

2. 创建简单的HTTP服务器

创建一个简单的静态网站

假设你有一个简单的静态HTML页面,可以将其放在NGINX的默认网站目录 /var/www/html/ 下,然后通过浏览器访问该页面。以下是一个简单的示例:

/var/www/html/index.html 中创建一个文件:

<!DOCTYPE html>
<html>
<head>
    <title>欢迎使用NGINX</title>
</head>
<body>
    <h1>Hello, NGINX!</h1>
    <p>这是一个简单的NGINX服务器示例。</p>
</body>
</html>
配置NGINX以提供该静态网站

编辑NGINX的默认站点配置文件 /etc/nginx/sites-available/default,添加一个 server 块来指定NGINX如何处理请求:

server {
    listen 80 default_server;
    listen [::]:80 default_server;

    root /var/www/html;
    index index.html;

    server_name _;

    location / {
        try_files $uri $uri/ =404;
    }
}

这个配置中:

  • listen 指定NGINX监听的端口(80端口是HTTP的默认端口)。
  • root 指定NGINX寻找文件的根目录。
  • index 指定默认的首页文件。
  • server_name 设置为 _ 表示匹配任何请求的主机名。
  • location / 定义了处理请求的位置。try_files 指令尝试寻找匹配的文件,如果找不到则返回404错误。

3. 使用NGINX作为反向代理

NGINX可以作为反向代理,将请求转发到不同的服务器上。

配置NGINX作为反向代理

假设你有一个Node.js应用运行在本地的3000端口上,可以通过NGINX将请求代理到该应用。

编辑NGINX的配置文件 /etc/nginx/sites-available/default

server {
    listen 80;
    server_name 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_cache_bypass $http_upgrade;
    }
}

在这个配置中:

  • server_name 指定NGINX监听的域名。
  • location / 定义了反向代理的位置。
  • proxy_pass 将请求代理到指定的后端服务器。
  • 其他 proxy_set_header 指令用于设置HTTP头部以确保反向代理正常工作。

4. 配置HTTPS

在生产环境中,通常需要配置HTTPS以提供安全的通信。

配置NGINX支持HTTPS

首先,你需要获取SSL证书(通常是通过Let’s Encrypt免费证书服务获取),然后配置NGINX以支持HTTPS。

编辑NGINX的配置文件 /etc/nginx/sites-available/default

server {
    listen 80;
    listen [::]:80;
    server_name example.com;
    return 301 https://$server_name$request_uri;
}

server {
    listen 443 ssl http2;
    listen [::]:443 ssl http2;
    server_name example.com;

    ssl_certificate /path/to/fullchain.pem;
    ssl_certificate_key /path/to/privkey.pem;

    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_cache_bypass $http_upgrade;
    }
}

这个配置中:

  • 第一个 server 块将所有HTTP请求重定向到HTTPS。
  • 第二个 server 块监听443端口(HTTPS默认端口)并配置SSL证书和私钥。
  • proxy_pass 和其他代理设置保持不变,但现在在加密的通信通道上进行。