Nginx 入门
什么是Nginx?
一款高性能的Web服务器,同时也是一个反向代理服务器、负载均衡服务器和HTTP缓存服务器。
Nginx 快速入门
- 在 Windows 系统中安装 Nginx,可以按照以下步骤进行:
-
下载 Nginx:在 Nginx 的官网(nginx: download ) 下载Windows 版本的 Nginx 压缩包。
-
解压缩:将下载的 Nginx 压缩包解压到一个目录下,例如 C:\nginx。
-
配置 Nginx:进入 C:\nginx 目录,打开 conf 目录下的
nginx.conf
文件,根据需要进行配置。例如,您可以配置 Nginx 监听的端口、服务器的域名和 SSL 证书等。执行以下命令测试Nginx配置:nginx -t
-
启动 Nginx:在命令行中进入 C:\nginx 目录,执行以下命令启动 Nginx:
start nginx
-
访问 Nginx:在浏览器中输入 localhost,将显示 Nginx 的欢迎页面。如果您已经配置了服务器的域名,可以在浏览器中输入该域名,以访问 Nginx。
-
更改配置后重载 Nginx :
nginx -s reload
-
停止 Nginx:在命令行中进入 C:\nginx 目录,执行以下命令停止 Nginx:
nginx -s stop
-
将Nginx设置为Windows的服务
-
下载 WinSW.NET451.exe ( Releases · winsw/winsw · GitHub ) 到 nginx.exe 同级的目录中
-
在该目录下,新建文件
nginx-service.xml
<service> <id>nginx</id> <name>nginx</name> <description>nginx</description> <logpath>C:\nginx</logpath> <logmode>roll</logmode> <depend></depend> <executable>C:\nginx\nginx.exe</executable> <stopexecutable>C:\nginx\nginx.exe -s stop</stopexecutable> </service>
-
用管理员打开命令窗口 输入
nginx-service.exe install
-
提示安装成功后继续输入
nginx-service.exe start
-
打开服务,检查是否开启了名为nginx的服务
从 Windows 的开始菜单中,单击运行(
Option + R
),输入services.msc
,然后单击确定。 -
访问 Nginx:在浏览器中输入 localhost (如有需要可以加上端口如:localhost:8888),将显示 Nginx 的欢迎页面。如果您已经配置了服务器的域名,可以在浏览器中输入该域名,以访问 Nginx。
-
Nginx 已配置成开机自启动。
排查 Nginx 常用命令
-
查看 Nginx 进程号(PID)
tasklist|findstr "nginx"
注:在 Windows 操作系统中,tasklist 是一个命令行工具,用于列出正在运行的进程和相关信息,包括进程的名称、进程 ID、内存使用情况、状态、用户名、CPU 时间和窗口标题等信息。
-
查看 Nginx 端口
netstat -aon|findstr 5460
注:
netstat -aon
是一个 Windows 操作系统下的netstat
命令,用于显示所有活动的网络连接,包括 TCP 和 UDP 连接,以及它们所占用的本地和远程 IP 地址、端口号、连接状态、以及进程 ID(PID)和进程名称。具体来说,
-a
参数用于显示所有活动的网络连接,包括监听中的连接和已建立的连接;-o
参数用于显示每个连接对应的进程 ID(PID);-n
参数用于禁止解析 IP 地址和端口号,以便更快地显示连接信息。 -
结束 Nginx 进程
taskkill /f /t /im nginx.exe
注:Taskkill 是 Windows 操作系统中的一个命令行工具,用于终止正在运行的进程。它可以强制终止一个进程,也可以根据进程名或进程 ID 来终止一个进程。
下面是一些 Taskkill 常用的参数和示例:
- /F:强制终止进程,无需确认。
- /IM <进程名>:根据进程名终止进程。例如,taskkill /IM notepad.exe 将会终止所有名为 notepad.exe 的进程。
- /PID <进程 ID>:根据进程 ID 终止进程。例如,taskkill /PID 1234 将会终止进程 ID 为 1234 的进程。
- /T:终止指定进程及其子进程。
示例:
- 终止名为 notepad.exe 的进程:
taskkill /IM notepad.exe
- 终止进程 ID 为 1234 的进程:
taskkill /PID 1234
- 终止名为 chrome.exe 的进程及其子进程:
taskkill /IM chrome.exe /T
Nginx 进阶
什么是反向代理服务器
反向代理服务器是一种在服务器端使用的代理服务器,用于在客户端和后端服务器之间充当中间层。它接收来自客户端的请求,然后将请求转发到后端服务器上,最后将响应返回给客户端。
与传统的代理服务器不同,反向代理服务器隐藏了后端服务器的真实IP地址和其他细节,因此可以提高安全性并减少攻击的风险。此外,反向代理服务器还可以缓存静态内容,减少后端服务器的负载并提高性能。
反向代理服务器通常用于以下场景:
- 负载均衡:反向代理服务器可以将请求分发到多个后端服务器,从而平衡负载和提高可靠性。
- 安全性:反向代理服务器可以在前端处理来自客户端的请求,从而提供一定的安全性和隐私保护。
- 内容缓存:反向代理服务器可以缓存静态内容,从而减少后端服务器的负载并提高性能。
- 提供访问控制和监控:反向代理服务器可以用于提供访问控制和监控。
一些流行的反向代理服务器包括nginx、Apache、HAProxy等。
如何进行反向代理
-
修改 Nginx 配置文件:在 Nginx 的配置文件中,添加一个新的 server 块,用于定义反向代理服务。在 server 块中,配置 Nginx 监听的端口、代理的目标服务器地址和端口等信息。例如:
server { listen 80; server_name example.com; location / { proxy_pass http://backend_server:8080; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; } }
在这个示例中,Nginx 会监听 80 端口,并将所有请求代理到名为 backend_server 的服务器的 8080 端口。
-
重启 Nginx:在修改完配置文件后,需要使用以下命令重启 Nginx 以使更改生效:
nginx -s reload
-
验证反向代理:在浏览器中访问代理服务器的 IP 或域名,Nginx 将会将请求转发到后端服务器,并将响应返回给客户端。
需要注意的是,代理服务器的 Nginx 配置文件中的 location 块中的 URL 路径应与后端服务器的 URL 路径相同,以确保反向代理工作正常。
什么是负载均衡服务器
负载均衡服务器是一种用于分发网络负载的服务器,其目的是将请求分发到多个后端服务器上,以平衡负载并提高可用性和性能。
负载均衡服务器通常用于高流量的Web应用程序、数据库集群和其他服务中。当客户端向应用程序或服务发出请求时,负载均衡服务器会使用不同的算法来决定将请求分发到哪个后端服务器上。这样可以避免任何一个服务器被过度负载,从而提高整个系统的稳定性和可靠性。
常见的负载均衡算法包括轮询、加权轮询、IP散列、最少连接数和最快响应时间等。负载均衡服务器可以使用这些算法来确定哪个后端服务器应该接收请求,并将请求转发给相应的服务器。在一些情况下,负载均衡服务器还可以使用多个负载均衡策略来增强系统的性能和可用性。
一些流行的负载均衡服务器包括HAProxy、nginx、F5 BIG-IP、AWS ELB等。
如何使用 Nginx 进行负载均衡?
-
配置 Nginx:在 Nginx 的配置文件中,添加多个 server 块,用于定义不同的后端服务器。在每个 server 块中,配置 Nginx 监听的端口、后端服务器的地址和端口等信息。例如:
upstream backend { server backend1.example.com:8080; server backend2.example.com:8080; } 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; } }
在这个示例中,Nginx 定义了一个名为 backend 的 upstream,其中包含两个后端服务器 backend1.example.com 和 backend2.example.com。Nginx 会监听 80 端口,并将请求均衡分配到两个后端服务器之一。
-
重启 Nginx:在修改完配置文件后,需要使用以下命令重启 Nginx 以使更改生效:
nginx -s reload
-
验证负载均衡:在浏览器中访问代理服务器的 IP 或域名,Nginx 将会将请求分配到后端服务器中的一个,并将响应返回给客户端。
什么是HTTP缓存服务器
HTTP缓存服务器是一种用于缓存Web应用程序的资源的服务器,包括HTML文件、CSS文件、JavaScript文件、图像和其他静态资源。它可以帮助减少网络流量、提高应用程序性能和用户体验。
当用户第一次访问Web应用程序时,HTTP缓存服务器会将应用程序的资源下载到本地缓存中。然后,当用户再次访问相同的应用程序时,这些资源可以从缓存中加载,而不必再次从Web服务器下载。这可以减少网络带宽的使用,并且可以提高应用程序的响应时间。
HTTP缓存服务器通常使用HTTP缓存控制头来控制缓存行为。这些头信息包括“Cache-Control”、“Expires”、“Last-Modified”和“ETag”等。这些头信息告诉缓存服务器和浏览器应该如何缓存资源,以及何时需要从Web服务器重新获取资源。
常见的HTTP缓存服务器包括Varnish、Squid、nginx等。这些缓存服务器可以轻松地配置和管理,并可以显著提高Web应用程序的性能和可靠性。
如何部署前端服务,并配置 Nginx 不使用缓存
location / {
alias "/root/myProject";
autoindex off;
index index.html;
if ($request_filename ~ .*\.(htm|html)$){
expires -1;
add_header Cache-Control "private, no-store, no-cache, must-revalidate, proxy-revalidate";
}
}
如何使用Nginx配置HTTPS
upstream myServer{
server 1.1.1.1:8080;
}
server {
listen 443;
ssl on;
ssl_certificate cert.pem;
ssl_certificate_key cert.key;
ssl_session_timeout 5m;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP;
ssl_prefer_server_ciphers on;
server_name my.host.com;
access_log logs/my.host.com.log;
location / {
proxy_pass http://myServer/;
}
}
server {
listen 80;
server_name my.host.com;
rewrite ^(.*)$ https://$host$1 permanent; #将所有http请求通过rewrite重定向到https。
location / {
proxy_pass http://myServer/;
}
}
注:server_name
指令指定了服务器的名称,应与证书中的名称匹配。 ssl_certificate
和 ssl_certificate_key
指令分别指定了证书和私钥的文件路径。