Nginx入门学习
Nginx入门学习
weh12Nginx介绍
Nginx(发音为“engine-x”)是一个高性能的HTTP和反向代理服务器, 它是通过C语言开发的,也是一个常用的邮件代理服务器和通用TCP/UDP代理服务器。它最初由俄罗斯的IgorSysoev开发,并于2004年首次公开发布。Nginx以其高稳定性、丰富的功能集、简单的配置和低资源消耗而闻名。
Nginx是为了解决C10K=10000 concurrent connection, 同时处理10000个并发连接, 这个问题是在当时是非常严重的, 因为当时的服务器软件都是单线程的, 所以在高并发的情况下服务器的性能会变得非常的差
Nginx的出现很好的解决了这个问题, Nginx可以支持5万个并发连接, 在后来的发展中Nginx也逐渐成为了最流行的Web服务器软件
以下是Nginx的一些主要特点和用途:
高性能的Web服务器:Nginx能够处理大量的并发连接,而内存消耗相对较低,这使得它非常适合作为静态内容的Web服务器。
反向代理服务器:Nginx可以作为反向代理服务器,将客户端的请求转发到后端服务器,如Apache或另一台Nginx服务器。这有助于负载均衡和提高网站的可用性。
负载均衡器:Nginx支持多种负载均衡策略,如轮询、最少连接、IP哈希等,可以将流量分配给多个后端服务器,以提高性能和可靠性。
HTTP缓存:Nginx可以缓存静态内容,减少后端服务器的负载,提高响应速度。
SSL终端代理:Nginx支持SSL/TLS加密,可以作为SSL终端代理,处理HTTPS连接。
模块化:Nginx具有高度模块化的设计,可以通过安装额外的模块来扩展其功能。
配置简单:Nginx的配置文件结构清晰,易于理解和管理。
跨平台:Nginx可以在多种操作系统上运行,包括Linux、FreeBSD、Solaris、Mac OS X和Windows。
邮件代理:Nginx也可以作为邮件代理服务器,支持SMTP、POP3和IMAP协议。
通用TCP/UDP代理:Nginx可以转发TCP和UDP流量,使其成为一个灵活的网络代理工具。
Nginx的这些特性使其成为构建高性能、高可用性和高可扩展性网络服务的理想选择。它广泛应用于互联网上的网站、API服务和内部网络服务。
Nginx的安装
Nginx有三种方式安装:
第一种直接通过包管理器安装
第二种通过编译安装
第三种通过Docker安装
Nginx服务启动和停止
我是通过Docker进行安装的, 因为为了更方便的学习不至于下载nginx
安装启动
下面简单说说Docker中Nginx下载配置:
1 | docker pull nginx # 直接下载镜像,简单粗暴 |
下载后我们查看镜像是否安装:
1 | docker images #列出所有镜像 |
没有问题, 之后直接创建一个容器, 本地映射到8080端口, 名字叫tongye-nginx
1 | docker run --name tongye-nginx -d -p 8080:80 nginx # -d表示在后台运行 |
这样我们的nginx服务就启动了, 在浏览器中输入localhost:8080直接就能打开
现在查看我们的端口占用情况, 由于我映射了端口, 在8080, 不是Docker安装启动可能是其他端口, 视情况而定
1 | sudo lsof -i :8080 #查看8080端口占用情况 |
我们可以直接看到docker-pr执行了
1 | COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME |
我们也可以直接查看nginx的进程
1 | ❯ ps -ef|grep nginx |
这里的master进程和worker进程分别为Nginx的主进程和工作进程, master用来管理worker子进程, worker则负责实际的请求, master进程只有一个, worker可以有多个
停止服务
如果和我一样是Docker安装启动的, 可以直接通过来停止
1 | docker stop 容器ID(容器名:标签) |
非Docker安装可以直接通过命令停止服务
1 | # 非docker安装 |
静态站点部署
查看nginx安装位置, 我是Docker安装所以还要进入容器内部
1 | docker exec -it tongye-nginx /bin/bash #进入容器内 |
非Docker安装用户, 直接通过命令查看
1 | nginx -V #记住要大写 |
我们在输出的信息中查看到 –conf-path=路径 这一行, 这个位置和你使用的操作系统以及安装方式有关, 因此各不相同
由于我本地没有写配置文件到容器, 所以conf文件中并能没有内容, 所以在这之前就应该执行
1 | docker run -d -p 80:8080 -v /path/to/your/nginx.conf:/etc/nginx/nginx.conf:ro nginx |
这条命令会将宿主机上的
/path/to/your/nginx.conf
文件挂载到容器的/etc/nginx/nginx.conf
路径,并以只读方式打开。确认配置文件语法:在启动 Nginx 之前,使用
nginx -t
命令来测试配置文件的语法是否正确。这可以确保你的配置文件没有语法错误,从而避免 Nginx 启动失败。
这里就简单讲解一下nginx.conf配置文件的基本内容
1 | # 用户和组可以根据您的系统进行更改 |
往下翻我们找到server部分, 然后在里面有一个location, 这个location就是用来匹配我们在浏览器中输入的URL的, 比如这里的斜线/就表示匹配根目录, 也就是说我们只输入localhost后面不跟端口就会匹配到root后面的内容(相对路径目录), 然后就会到它里面指定目录下去找一个index.html的文件, 也就是我们的默认页面
怎么把开发好的站点部署在Nginx
第一种方法很简单, 直接把网站网页的输出页面比如public文件复制到root的根目录之下就行了
1 | server { |
修改完成后,重启Nginx以应用配置更改。
1 | sudo systemctl restart nginx # CentOS/Debian/Ubuntu |
请注意,这个过程可能需要根据你的具体服务器环境和配置进行调整。如果你使用的是云服务,可能还需要配置安全组规则以允许HTTP(80端口)和HTTPS(443端口)的流量。此外,如果你的博客托管在自定义域名下,还需要配置DNS记录以指向你的服务器IP地址,并在服务器上配置SSL证书以启用HTTPS
反向代理和负载均衡
正向代理和反向代理
简单来说 正向代理就是代理客户端, 而反向代理就是代理服务端
配置反向代理:
打开 Nginx 的配置文件,通常位于 /etc/nginx/nginx.conf
或 /etc/nginx/sites-available/default
。
在 http
块中添加一个新的 server
块,配置反向代理:
1 | server { |
- 这里的
backend_server
可以是另一个 Nginx 服务器的地址,或者是你的后端应用服务器的地址。
重启 Nginx:
保存配置文件后,重启 Nginx 以应用更改:
1 | sudo systemctl restart nginx |
负载均衡
负载均衡(Load Balancing)是一种将网络流量分发到多个服务器的方法,以优化资源使用、最大化吞吐量、最小化响应时间,并避免任何单点过载。
配置负载均衡:
在相同的 server
块中,你可以配置多个 upstream
服务器:
1 | # 反向代理配置代码 |
这里的 upstream
定义了一个服务器组,Nginx 将使用轮询(默认)或其他算法(如最少连接、IP哈希等)来分配请求到这些服务器。
重启 Nginx:
保存配置文件后,重启 Nginx 以应用更改:
1 | sudo systemctl restart nginx |
HTTPS配置
HTTPS 的基本步骤:
- 获取 SSL/TLS 证书:
- 你可以从证书颁发机构(CA)购买证书,或者使用 Let’s Encrypt 免费获取证书。
- 如果使用 Let’s Encrypt,你可以使用 Certbot 这样的工具来自动化证书的获取和续签过程。
- 安装 SSL 模块:
- 确保 Nginx 编译时包含了 SSL 模块。通常,Nginx 的默认安装已经包含了 SSL 模块。
- 配置 Nginx:
- 编辑 Nginx 配置文件,通常位于
/etc/nginx/nginx.conf
或/etc/nginx/sites-available/
目录下的某个文件。 - 在 server 块中添加 SSL 配置。以下是一个基本的示例:
1 | server { |
- 重载 Nginx 配置:
保存配置文件后,重载 Nginx 以应用更改:
sudo nginx -t # 测试配置文件是否有语法错误 sudo systemctl reload nginx # 重载 Nginx 配置
1
2
3
4
5
6
7
8
9
10
11
12
13
- **测试 HTTPS 连接**:
- 使用浏览器或 SSL 测试工具(如 SSL Labs 的 SSL Server Test)来测试你的 HTTPS 配置。
## Nginx常用命令
以下是一些常用的 Nginx 命令:
1. **启动 Nginx:**
```bash
sudo service nginx start
或者使用 systemctl
(如果你使用的是使用 systemd
的系统):
sudo systemctl start nginx
1
2
3
4
5
6
- **停止 Nginx:**
```bash
sudo service nginx stop
或者使用 systemctl
:
sudo systemctl stop nginx
1
2
3
4
5
6
- **重启 Nginx:**
```bash
sudo service nginx restart
或者使用 systemctl
:
sudo systemctl restart nginx
1
2
3
4
5
6
- **重新加载 Nginx 配置文件:**
```bash
sudo nginx -s reload
或者使用 systemctl
:
sudo systemctl reload nginx
1
2
3
4
5
- **查看 Nginx 的版本:**
- ```bash
nginx -v查看 Nginx 的配置文件是否正确:
sudo nginx -t
1
2
3
4
5
6
- **查看 Nginx 的运行状态:**
```bash
sudo service nginx status
或者使用 systemctl
:
sudo systemctl status nginx
1
2
3
4
5
6
7
8
9
10
11
- **查看 Nginx 的访问日志:**
Nginx 的默认访问日志位置通常在 `/var/log/nginx/access.log`。
- **查看 Nginx 的错误日志:**
Nginx 的默认错误日志位置通常在 `/var/log/nginx/error.log`。
- **查看 Nginx 的进程信息:**
- ```bash
ps aux | grep nginx查看 Nginx 的开放端口:
sudo netstat -tulnp | grep nginx
1
2
3
4
5
6
- **查看 Nginx 的工作进程数:**
1. ```bash
ps -eLf | grep nginx
这些命令在大多数 Linux 发行版上都是通用的