这些天本来打算部署一个小项目练手,却发现明明已经用了一年nginx了,却连配置都不会,往往都是跟着视频囫囵吞枣。今天便花了点时间学习了一些基本操作。
正向代理和反向代理
在使用nginx——目前最流行的web服务器软件之前,有必要先搞懂这两个概念:正向代理和反向代理是什么?
简单通俗的来说
正向代理就是代理客户端
比如用vpn访问外网,就是用vpn的那个服务器代理成客户端向外网发请求,然后结果返回到我们自己的设备上
反向代理就是代理服务端
比如Google网站后面有许多服务器,但是对外只暴露一个域名,我们都通过这一个域名来访问,从而隐藏了真实服务器的ip,端口等信息
nginx的基本指令
nginx
启动命令 不报错就是正常运行nginx -s reload
重启,每次更改完配置都要重启nginx -t
检查配置文件的正确性nginx -s quit
服务平滑停止
nginx配置文件
我的理解中nginx的conf配置文件主要分为三块
全局块: 配置全局,如worker_process就是服务器的进程数,建议设置为auto即和电脑cpu内核数自动匹配
nginx中由一个master进程管理多个worker进程,关系图如下:
master进程负责读取配置文件等,而worker进程则负责处理实际请求,它们之间的关系就如老板和员工一样,master只能有一个
events块: 服务器和客户端之间的网络连接配置。例如worker_connections就是指定每个服务器进程可以接收多少个网络连接
http块: 改动最频繁的块,里面又有多个server块,每一个又称为一台虚拟主机
在以上的配置文件中,我就编写了三个Java程序分别监听8000、8001、8002三个端口,然后通过反向代理到/app路径,可以在localhost/app访问这三个端口
服务器默认负载均衡的是轮询,ip_hash则是根据客户端IP地址进行一个hash,同一个客户端请求总会被分配到同一个服务器上
当然,也可以指定服务器的权重,通过在端口后加weight=?
实现,权重越大,被分配到的请求次数也就越多
以上的操作都是通过http协议进行的,在获取ssl证书后就可以使用更安全https协议了。