nginx 服务器概述
Nginx 是一款高性能的 HTTP 和 反向代理 服务器,同时是一个 IMAP / POP3 / SMTP 代理服务器。Nginx 凭借其高性能、稳定性、丰富的功能集、简单的配置和低资源消耗而闻名。
浏览 nginx 官网:https://nginx.org/
Nginx 应用场景
静态文件服务:Nginx 可以高效地处理大量的静态文件请求,例如 HTML、CSS、JavaScript、图片等。
反向代理:将客户端的请求转发到后端的Web服务器,实现负载均衡和请求过滤。
API 网关:作为 API 的入口点,处理 API 请求的路由、认证、限流等。
HTTP / HTTPS 服务器:直接作为 Web 服务器,处理 HTTP 和 HTTPS 请求。
流媒体服务:支持视频、音频等流媒体内容的传输。
windows 安装 nginx
下载地址:https://nginx.org/en/download.html
解压目录
启动 nginx 服务
启动:解压目录位置进行打开 nginx.exe 文件
浏览器访问:localhost
80 端口占用问题
[emery] blind() to 0.0.0.0:80 failed (10013: An attempt was made to access a socket in a way forbidden by its access permissions) 就是80端口被其他程序占用。
查看 80 端口占用的程序
netstat -aon | findstr :80
使用 taskkill 结束进程(注意:/F
参数表示强制杀死进程)
taskkill /F /PID 【PID】
nginx 服务器配置
nginx 配置文件 conf 目录下 nginx.conf(默认配置 nginx 监听端口 80)
当更新了 nginx 配置文件 nginx.conf 时需要执行 nginx -s reload
nginx -s reload
关闭 nginx 服务
快速停止 nginx: nginx -s stop
有序停止 nginx: nginx -s quit
taskkill: taskkill /f /t /im nginx.exe
nginx 配置反向代理
在 Nginx 中配置请求转发(也称为反向代理)是一种常见的技术,它允许 Nginx 将客户端的请求转发到后端服务器(如应用服务器或另一个 Nginx 实例),并将后端服务器的响应返回给客户端。
server {
listen 80; # 监听80端口
server_name yourdomain.com www.yourdomain.com; # 服务器名
location / {
proxy_pass http://backendserver.com; # 转发请求到后端服务器
proxy_set_header Host $host; # 将请求头中的Host字段转发给后端服务器
proxy_set_header X-Real-IP $remote_addr; # 转发真实IP地址
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; # 转发X-Forwarded-For请求头
proxy_set_header X-Forwarded-Proto $scheme; # 转发协议(http或https)
# 可以添加更多的proxy_set_header指令来转发其他请求头
# 如果后端服务器需要HTTPS,确保使用proxy_pass https://...
}
# 其他location块...
}
在这个配置中,所有对 yourdomain.com 的请求都将被转发到 http://backendserver.com。通过 proxy_pass 指令指定了后端服务器的地址。proxy_set_header 指令用于转发请求头到后端服务器,这对于后端服务器根据请求头信息(如客户端的真实 IP 地址)做出决策很重要。
配置 80 端口代理本地 8080 端口
在Nginx中配置 80 端口转发到 8080 端口,意味着你想要让 Nginx 监听 80 端口(HTTP 的标准端口),并将所有接收到的请求转发到本地(或远程)的 8080 端口上。这通常用于将 Web 应用的默认 HTTP 端口(如Tomcat 的 8080)暴露给标准的 HTTP 端口,从而用户可以直接通过 HTTP 协议访问 Web 应用,而无需指定端口号。
server {
listen 80; # 监听80端口
server_name yourdomain.com www.yourdomain.com; # 替换为你的域名
location / {
proxy_pass http://127.0.0.1:8080; # 转发请求到本地的8080端口
proxy_set_header Host $host; # 转发Host头
proxy_set_header X-Real-IP $remote_addr; # 转发真实IP
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; # 转发X-Forwarded-For头
proxy_set_header X-Forwarded-Proto $scheme; # 转发协议(http或https)
# 如果需要处理WebSocket连接,请确保添加以下行
# proxy_http_version 1.1;
# proxy_set_header Upgrade $http_upgrade;
# proxy_set_header Connection "upgrade";
# 其他可能需要的配置...
}
# 其他location块...
}
请注意,server_name指令应该被设置为你的域名(或IP地址,但出于SEO和安全性的考虑,建议使用域名)。如果你没有域名,或者只是想在本地测试这个配置,你可以将server_name设置为localhost或_(下划线),但这将允许Nginx处理所有未明确指定server_name的请求,这通常不推荐在生产环境中使用。
注意:配置完成后,不要忘记重新加载或重启 Nginx 以使更改生效。
重新加载 Nginx 配置
sudo nginx -s reload
使用 systemctl
sudo systemctl reload nginx
如果你遇到任何问题,确保 Nginx 正在运行,并且你的防火墙或安全组规则允许从外部访问 80 端口。如果你是在本地机器上测试这个配置,并且无法从外部访问它,那么这可能是因为你的防火墙设置或ISP(互联网服务提供商)的限制。在这种情况下,你可以尝试从同一台机器上的不同浏览器或使用 curl 命令来测试配置。
配置 ssl 证书
SSL证书(全称Secure Sockets Layer Certificate)是一种数字证书,其核心作用是在互联网通信中实现数据的安全传输。
SSL证书基本概念
SSL证书是遵守SSL协议,由受信任的数字证书颁发机构CA(Certificate Authority),在验证服务器身份后颁发的一种数字证书。它类似于驾驶证、护照和营业执照的电子副本,安装在服务器上后,也被称为SSL服务器证书。SSL证书通过在客户端(如浏览器)和服务器之间建立一条SSL安全通道(Secure Socket Layer),确保在互联网上传输的数据得到保护,防止被未经授权的第三方窃取或篡改。
nginx.conf 配置文件
server {
listen 443 ssl;
server_name 需要访问的域名; # 这里替换为实际的域名,不需要加 https://
# 注意:ssl on; 这条指令在新版 Nginx 中不需要,因为 listen 443 ssl 已经隐含了启用 SSL
ssl_certificate C:/Users/Administrator/Desktop/nginx-1.27.1/ssl/xcx.mjrate.com.pem; # 正确的证书文件路径
ssl_certificate_key C:/Users/Administrator/Desktop/nginx-1.27.1/ssl/xcx.mjrate.com.key; # 正确的私钥文件路径
ssl_session_cache shared:SSL:1m;
ssl_session_timeout 5m;
ssl_ciphers HIGH:!aNULL:!MD5; # 您可以考虑使用更现代的密码套件列表
ssl_prefer_server_ciphers on;
# HTTP 到 HTTPS 的重定向(如果需要的话,这里没有直接包含)
location / {
proxy_pass http://127.0.0.1:8080/; # 转发请求到本地的8081端口
proxy_set_header Host $host; # 转发 Host 头
proxy_set_header X-Real-IP $remote_addr; # 转发真实 IP
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; # 转发 X-Forwarded-For 头
proxy_set_header X-Forwarded-Proto $scheme; # 注意:这里 $scheme 在 SSL 上下文中通常是 https,但如果您有特殊的反向代理配置,可能需要调整
# 还可以添加其他必要的 proxy_set_header 指令
}
# 其他 location 块或全局配置...
}
重新加载 Nginx 配置
nginx -s reload