nginx入门
我也是小白,各位倘若看到一定要带着思考来看.
以下内容皆为个人理解,可能存在错误.
一、背景
-
什么是nginx
nginx网上解释的吧啦吧啦一大堆,个人的理解就是可以在用户与服务器之间的一个web服务器.有了nginx,我们就可以在用户和服务器中间做一些事情.
类似于下面这样
用户发起请求后,被nginx所接受,nginx就可以对这个请求做一些处理. -
实例:
在本地设置nginx为80端口,在浏览器中输入localhost后,请求就转到了nginx中.
(如果我们nginx中设置将请求转到9596端口)
用户输入的是localhost,而实际上访问到的是localhost:9596,这就是nginx的作用之一.
二、nginx的安装(Windows)
OpenResty是nginx的扩展版本,实际上也就是nginx,当做nginx即可.
下载地址(2020.4.29)
下载后得到一个压缩包,解压到自己想要的文件夹即可.
我解压到了E:\Software\Nginx\OpenResty目录下,点开对应的文件夹,里面的内容是这样的.
由于刚入门,所以目前我们关注的只有两个东西
- nginx.exe
- conf文件夹下的nginx.conf文件
nginx.exe用于启动nginx,而nginx.conf是我们的配置信息.
三、nginx的启动
- 首次启动
在nginx.exe目录下,按住shift后点击鼠标右键,选择在此处打开命令窗口.
命令窗口输入命令
nginx.exe
即可启动nginx.
打开浏览器输入localhost,访问到欢迎页面,说明启动成功.
- 重新启动
在第一次启动后,发现那个启动窗口好像卡住了,可以重新"此处打开命令窗口",然后输入
nginx.exe -s reload
即可重新启动
- 关闭nginx
在win系统中,强制结束nginx.exe
taskkill /f /im nginx.exe
扩展
1.查看指定端口的占用情况
netstat -aon|findstr "端口号"
可以看到端口xx被指定进程号(pid)xx的进程占用
2.查看指定pid对应的程序名
tasklist|findstr "pid"
3.按进程名字关闭
taskkill /im xx.exe
4.按进程号关闭
taskkill /pid pid号
5.强行终止
taskkill /f /im xx.exe
taskkill /f /pid pid号
四、nginx的匹配规则
在/conf目录下的nginx.conf文件中,我们可以对nginx进行一些配置.
在http->server下可以对请求进行配置.
- 请求配置的格式为:
location 规则 请求名{
}
例如配置规则为:
重启nginx(命令nginx.exe -s reload)
在浏览器中输入localhost/hello
- 根据输入的请求不同,做出的处理也不同.
优先级从高到低
1. =
2. ^~
3. ~
4. 直接写请求名字
详情如下图
五、反向代理
nginx在收到请求后,将请求转到对应的服务器上.
例如配置/a请求在localhost:1234上,而/b请求在localhost:5678上.
可以填写真实的ip地址和端口,只不过此处写的都是本机而已.
这样用户输入localhost/a或者localhost/b,感觉访问的是同一台服务器,但是nginx却分发到了不同的服务器上.
这样服务器对用户来说就是不可见的,你输入的1.1.1.1访问,实际上可能转到了别的ip如2.2.2.2上.
-
如何设置反向代理
proxy_pass http://ip:port
访问localhost,实际上访问到的是127.0.0.1:9596,注意http://开头
直接访问9596端口,可以看到网页如下.
由于设置了反向代理,直接输入localhost也能访问到该页面.
注意
# 后面没有加"/"
location /a {
# 转到了 http://127.0.0.1:9596/a
proxy_pass http://127.0.0.1:9596;
}
# 后面都加个"/",转到的就是根目录.
location /b/ {
# 转到了 http://127.0.0.1:9596,最后也有个"/"
proxy_pass http://127.0.0.1:9596/;
}
六、负载均衡
通过上面的内容我们可以知道,我们可以配置实际访问的服务器.
这样访问同一个请求,可以让不同的服务器去处理,减轻了服务器的压力.
worker_processes 1;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
#是ip地址没有http
upstream group1{
server 127.0.0.1:1234 weight=1;
server 127.0.0.1:5678 weight=5;
}
server {
listen 80;
server_name localhost;
# 设置格式
default_type text/html;
#替代group1
location /b/ {
proxy_pass http://group1/;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
}