nginx
简介
Nginx(发音为”engine-x”)是一个高性能的开源 Web 服务器和反向代理服务器。以下是 Nginx 的一些关键特点和简介:
高性能: Nginx 以高性能而著称,能够处理大量并发连接,同时占用较少的系统资源。它的事件驱动架构和非阻塞 IO 模型有助于实现高效的性能。
轻量级和可扩展: Nginx 的设计目标之一是保持简单、轻量级且可扩展。它的模块化架构使得用户可以根据需要选择性地添加功能模块。
反向代理: Nginx 可以用作反向代理服务器,接收客户端请求并将其转发到后端服务器。这使得它成为负载均衡和提高 Web 应用性能的理想选择。
负载均衡: Nginx 支持基于轮询、IP 哈希等算法的负载均衡,能够平均分配流量到多个后端服务器,提高系统的可用性和稳定性。
静态文件服务: Nginx 非常擅长提供静态文件服务,可以快速地传送静态内容,减轻后端服务器的负担。
SSL/TLS 支持: Nginx 支持 SSL/TLS 协议,能够提供安全的加密通信,用于保护网站和应用程序的数据传输。
虚拟主机: Nginx 支持虚拟主机配置,允许多个域名共享同一台服务器,并根据域名或其他条件进行不同的配置。
日志记录: Nginx 提供详细的访问日志和错误日志,有助于进行故障排除和性能优化。
社区支持和活跃: Nginx 是一个开源项目,拥有庞大的用户社区,有许多第三方模块和插件可用。它也有商业版本(NGINX Plus)提供额外的功能和支持。
总体而言,Nginx 是一个强大、灵活且高性能的 Web 服务器,适用于处理各种 Web 应用程序和场景。由于其卓越的性能和可扩展性,它被广泛用于互联网和企业环境中
安装
1. 包管理安装
1 | brew install nginx |
or
1 | sudo apt update |
2. 编译安装
下载源码,预编译,编译,安装,比较灵活,可以自定义配置一些东西,但比较麻烦
3. 使用 Docker 安装
1 | docker pull nginx |
启动服务
- 启动命令:
1 | nginx |
没有消息就是好消息
打开浏览器输入 localhost,能打开页面看到 Welcome to nginx! ,说明启动成功
ps -ef|grep nginx
可查看 nginx 进程nginx -s signal
quit : 优雅停止
stop: 立即停止
reload:重新配置文件
reopen:重新打开日志文件nginx -V
可以查看 Nginx 的安装目录,编译参数等等如何查看 nginx 运行的网页的位置
nginx -V
找到–prefix,例如: –prefix=/opt/homebrew/Cellar/nginx/1.21.6_1
cd /opt/homebrew/Cellar/nginx/1.21.6_1
ls -ltr
可以看到列表中有 htmlcd html
ls -ltr
code index.html
搭建一个属于自己的个人博客网站
- 新建博客
1 | npm install hexo-cli -g |
- 部署到 nginx 上
然后将 hexo 生成的网页文件(在 public 目录下),复制到 nginx 中
cp -rf * /opt/homebrew/var/www
nginx 配置
1. 基本的服务器配置
1 | server { |
2. 反向代理配置
1 | server { |
3. 负载均衡配置
1 | upstream backend { |
4. SSL/TLS 配置
1 | server { |
5. 重定向配置
1 | server { |
反向代理和负载均衡
正向代理和反向代理
正向代理 代理客户端(client)(VPN)
反向代理 代理服务端(server) (比如我们通过 Google 搜索内容,我们只通过一个域名访问,但其实转发到了后面很多个不同的服务器端上,从而隐藏了真实的服务器 IP 地址、端口等信息)
例子
- 首先先用 go 生成一个简单的 web 页面,在端口 8000 监听,这里我是用 chatGPT 自动帮我生成:
如果没有安装 go,请先安装,我这边直接用
brew install go
1 | package main |
我们将上面的文件再复制出两个文件,分别改写端口号为 8001、8002,分别运行在浏览器中。
然后我们再修改一下 nginx 的配置文件
code /opt/homebrew/etc/nginx/nginx.conf
添加upstream
的配置,这个就是反向代理的配置
1 | upstream backend{ |
在 下面的 server 配置中再添加一个 location 的配置,访问 app 都将代理到刚刚的配置中
1 | location /app{ |
- 重新 reload 一下 nginx 配置
nginx -s reload
https 配置
http + ssl 证书 -> https
http 默认端口: 80
https 默认端口: 443
在主流的云平台(腾讯云,阿里云,AWS,GCP)上都可以申请免费的 ssl 证书,证书申请完后会得到证书文件(cacert.pem)和私钥文件(private.key),如果没有云平台也没有关系,我们可以通过 openssl 来自己生成一个自签名的证书
openssl 生成证书
- 生成私钥文件(private key)
openssl genrsa -out private.key 2048
- 根据私钥生成证书签名请求文件
openssl req -new -key private.key -out cert.csr
- 使用私钥对证书申请进行签名从而生成证书(pem 文件)
openssl x509 -req -in cert.csr -out cacert.pem -signkey private.key
nginx 配置
这两个文件需要放置到服务器上证书文件(cacert.pem)和私钥文件(private.key)
,然后在 nginx 的配置文件中进行配置
- 在监听后加上 ssl
listen 443 ssl;
- 将证书和私钥填写进入
1 | ssl_certificate /opt/homebrew/etc/nginx/cacert.pem |
- 然后再加上一些验证配置和加密协议,这些配置基本是固定的
1 | server { |
我们的证书是自签名的,没有经过 ca 认证,所以打开网站会提示不安全
配置 http 重定向到 https
server {
listen 80;
server_name your_domain.com www.your_domain.com;
# 重定向到 HTTPS
return 301 https://$host$request_uri;
}
虚拟主机
虚拟主机可以在一个服务器上部署多个站点
配置
nginx 中通过server
块来配置虚拟主机,每个server
块就是一个虚拟主机
1 | server { |
如何将一个 vue 项目部署到服务器上
创建一个 vue 项目,并打包好
open nginx 配置项目
cd /opt/homebrew/etc/nginx
code .
- 新建一个 servers 文件夹,在 servers 里建
vue.conf
1 | server{ |
nginx -s reload
在浏览器中输入 localhost:5173 就可以看到 vue 项目。