当谈到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
和其他代理设置保持不变,但现在在加密的通信通道上进行。