什么是Nginx?
Nginx是一款轻量级的Web服务器、反向代理服务器,由于它的内存占用少,启动极快,高并发能力强,在互联网项目中广泛应用。
Nginx的作用
反向代理:
后端服务器的响应返回给客户端。在这个过程中,客户端不知道实际提供服务的是哪个服务器,而是与反向代理服务器进行通信。这种方式有助于隐藏后端服务器的真实地址和提高系统的安全性,同时也可以实现负载均衡和缓存等功能。简单来说,反向代理就像是一个“中间人”,帮助客户端和后端服务器进行通信,起到保护和优化的作用。
正向代理:
向代理是指代理服务器位于客户端和互联网之间,客户端需要通过代理服务器才能访问互联网上的资源。简单来说,正向代理就像是一个“跳板”,客户端通过这个跳板才能够访问到互联网上的各种网站和服务。正向代理服务器接收客户端的请求,然后代替客户端向互联网上的服务器发送请求,最后将服务器的响应返回给客户端。正向代理通常用于隐藏客户端的真实IP地址,绕过网络限制或者提高访问速度等目的。
联系:
- 正向代理中,proxy和client同属一个LAN,对server透明;
- 反向代理中,proxy和server同属一个LAN,对client透明。
nginx可以提供的服务
- web 服务
- 负载均衡(反向代理)
- web cache(web 缓存)
nginx下载
windows下安装
http://nginx.org/en/download.html 下载稳定版本。
启动nginx
直接点击nginx.exe执行,之后会弹出一个黑色的框,出现一瞬间
检查nginx是否启动成功
直接在浏览器输入http://localhost:8080/ 如何出现这个页面证明运行成功
server {
listen 8080;
server_name yourdomain.com;
location / {
root html;
index index.html;
}
}
mac下载
brew install nginx
常用的命令
// 查看安装信息
brew info nginx
// 停止 Nginx 服务
nginx stop
//重启 Nginx 服务
nginx reload
//检查 Nginx 配置文件语法是否正确
nginx -t
//查看 Nginx 版本:
nginx -v
基本路径
1.网站存放路径
/opt/homebrew/var/www
2.Nginx配置文件路径
/opt/homebrew/etc/nginx/nginx.conf
3.服务配置文件
/opt/homebrew/etc/nginx/servers
nginx配置文件使用
文件结构
... #全局块
events { #events块
...
}
http #http块
{
... #http全局块
server #server块
{
... #server全局块
location [PATTERN] #location块
{
...
}
location [PATTERN]
{
...
}
}
server
{
}
... #http全局块
}
1、全局块:这是设置影响整个Nginx服务器的地方。你可以在这里指定运行Nginx服务器的用户组,告诉Nginx进程应该存放在哪里,确定日志记录的位置,指定要包含的其他配置文件,以及决定允许同时运行多少个工作进程等等。
有趣的进程和线程科普文章: https://www.ruanyifeng.com/blog/2013/04/processes_and_threads...
2、events块:这里配置的是影响Nginx服务器与用户之间网络连接的参数。你可以设定每个进程能处理的最大连接数,选择Nginx处理连接请求的事件驱动模型,决定是否允许服务器同时接受多个网络连接,还可以开启多个网络连接的顺序处理等。
3、http块:HTTP块是最重要的部分之一,因为它包含了几乎所有与网站功能相关的设置。在这里你可以嵌套多个服务器配置,配置代理,缓存,日志记录等等。你可以在这里设置文件引用,定义MIME类型,自定义日志记录方式,确定是否使用sendfile来传输文件,设置连接超时时间,以及控制单个连接可以发送的请求数等。
4、server块:每个HTTP块中可以包含多个服务器块。服务器块用来配置虚拟主机的相关参数,比如你可以在这里指定不同域名的服务器配置。
5、location块:位置块用来配置请求的路由以及如何处理各种页面。简单来说,这就是告诉Nginx当收到特定请求时应该去哪里找文件,或者如何处理这个请求。
默认配置
#user nobody;
worker_processes 1;
#error_log logs/error.log;
#error_log logs/error.log notice;
#error_log logs/error.log info;
#pid logs/nginx.pid;
events {
worker_connections 1024;
}
http {
#这行配置包含了 mime.types 文件,这个文件定义了 MIME 类型及其对应的文件扩展名。
include mime.types;
#这行配置定义了默认的 MIME 类型。如果无法识别请求文件的类型,Nginx 将会使用这个默认类型
default_type application/octet-stream;
#access_log logs/access.log main;
sendfile on;
#tcp_nopush on;
#keepalive_timeout 0;
keepalive_timeout 65;
#gzip on;
server {
listen 8080;
server_name localhost;
#charset koi8-r;
#access_log logs/host.access.log main;
location / {
# 匹配的根目录,只写文件名默认在 /nginx 文件夹下
# 也可以写成绝对路径 /opt/homebrew/var/www
root html;
# 设置默认首页,按先后顺序匹配首页
index index.html index.htm;
}
#error_page 404 /404.html;
# 当报错 500 502 503 504 的时候走这个指定页面
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
include servers/*;
}
通过查看/opt/homebrew/var/www/index.html内容,发现就是我们访问8080的页面
更多详细配置可以参考
https://juejin.cn/post/6883355186790662158
https://www.runoob.com/w3cnote/nginx-setup-intro.html
web 服务
以上代码是使用 Nginx 配置的方式来充当 Web 服务器的示例
angular进行开发web程序
// 通过ng run build进行构建
ng run build
# 新增一个 server
server {
listen 17322;
server_name dentistry;
location / {
root /Users/kexiaobin/Desktop/code/dentistry/web/dist/web;
index index.html;
}
}
通过访问测试http://localhost:17322,如何出现这个页面证明运行成功
通过这样的配置,Nginx 成为了一个简单的 Web 服务器,可以提供静态文件服务,同时也可以通过不同的配置实现更复杂的功能,比如代理请求。
代理请求
这段代码是一个 Nginx 配置示例,用于设置代理模式
server {
listen: 8018;
server_name 127.0.0.1 localhost;
localhost /api/ {
proxy_pass http://127.0.0.1:8080/;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
localhost / {
proxy_pass http://127.0.0.1:4200;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
localhost /sockjs-node/ {
proxy_pass http://127.0.0.1:4200/sockjs-node/;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
}
}
# proxy_set_header Host $host;
# 这一行设置了代理请求的 Host 头,将其设置为客户端请求的 Host 头,确保在代理请求中保留了原始请求的主机信息。
# proxy_set_header X-Real-IP $remote_addr;
# 这一行将 X-Real-IP 头设置为客户端的真实 IP 地址,这对于跟踪客户端 IP 地址在代理后端服务器日志中非常有用。
# proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
# 这一行设置了 X-Forwarded-For 头,该头用于记录请求的客户端 IP 地址。$proxy_add_x_forwarded_for 会将当前客户端 IP 地址添加到之前的 X-Forwarded-For 头中,以构建一个 IP 地址链,显示请求经过的代理服务器
# proxy_http_version 1.1;
# 这一行设置了代理的 HTTP 版本为 1.1,这通常用于支持一些现代特性,如 HTTP/1.1 的持久连接。
# proxy_set_header Upgrade $http_upgrade;
# 这一行设置了请求头,将客户端请求中的 "Upgrade" 头字段的值传递到后端服务器。这是 WebSocket 连接协议的一部分,允许客户端和服务器进行协议升级,以建立 WebSocket 连接。
启动angular程序
// 通过ng s启动程序
ng s
通过访问测试http://localhost:8018,如何出现这个页面证明运行成功
通过客户端请求服务端,这是启动的springboot程序
通过这样的请求,可以在同一个端口上处理多个不同的后端服务,实现反向代理和请求路由等功能。
总结:
这篇文章只讲解了如果使用nginx进行充当web服务,和进行代理请求,更多使用方式待学习,目前这些已经满足了我的当前需求。
更多参考文章
https://ydlclass.com/doc21xnv/java/fourth/1%E3%80%81nginx%E5%...
https://www.runoob.com/w3cnote/nginx-setup-intro.html
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。