重新学习Nginx及其配置
/ / 点击 / 阅读耗时 6 分钟Nginx在我的工作中占据着很重要的一部分,因为我们公司的一些后台系统都是通过Nginx代理,才能完成联调或者开发。所以说如果没有Nginx,就不可能完成后续的项目开发。
由于一开始进公司并不了解Nginx,关于一些项目配置也是后端同事配置好发给我的。所以每次我只需要执行一下Nginx,然后在本地输入地址就能启动项目。但是就在前天开发一个项目的时候发现Nginx执行后,启动不了项目。我才开始有了想要更深入的了解Nginx的配置以及其工作原理。
什么是Nginx?
Nginx 是俄罗斯人编写的十分轻量级的 HTTP 服务器,是一个高性能的HTTP和反向代理服务器,同时也是一个 IMAP/POP3/SMTP 代理服务器。
Nginx可以做什么?
作为前端开发,Nginx最能解决实际问题的功能就是反向代理,其次还有负载均衡等。所以这次主要讲反向代理解决
Nginx反向代理
反向代理就是客户端访问目标服务器之间架设的一层代理服务器,代理服务器接受客户端请求将其转发给目标服务器,这个就是反向代理。
Nginx配置
因为Nginx的配置是非常多的,大部分配置不是非必填的。所以这里我以自己实际工作项目的Nginx配置为例,来解释每个配置文件的作用。
#nginx进程数
worker_processes 1;
events {
#单个进程最大连接数
worker_connections 1024;
}
http {
#文件扩展名与文件类型映射表
include mime.types;
#默认文件类型
default_type application/octet-stream;
#通常web服务器放在反向代理的后面,这样就不能获取到客户的IP地址了,通过$remote_add拿到的IP地址是反向代理服务器的iP地址。反向代理服务器在转发请求的http头信息中,可以增加x_forwarded_for信息,用以记录原有客户端的IP地址和原来客户端的请求的服务器地址。
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
#定义本虚拟主机的访问日志
access_log logs/access.log main;
#sendfile指令指定 nginx 是否调用sendfile 函数(zero copy 方式)来输出文件,对于普通应用,必须设为on。如果用来进行下载等应用磁盘IO重负载应用,可设置为off,以平衡磁盘与网络IO处理速度,降低系统uptime。
sendfile on;
#长连接超时时间,单位是秒
keepalive_timeout 120;
#负载均衡配置
upstream dubbo_http_adapter{
server localhost:9090;
}
#虚拟主机的配置(咱们前端主要配置这里面的文件)
server{
#监听端口
listen 80;
#配置基于名称的虚拟主机,这里是基于本地
server_name localhost;
#对 "/" 启用反向代理
location / {
#这里访问location会访问到我本地前端文件
root F:\company\cmb_merchant\aggplat\aggplat_www
index index.html index.htm;
try_files $uri $uri/ /index.html =404;
}
error_page 500 502 503 504 /50x.html;
#匹配后端以.do结尾的请求
location ~(\.do)$ {
proxy_pass http://192.168.1.13:8086;
proxy_redirect off;
proxy_set_header X-Real-IP $remote_addr;
#后端的Web服务器可以通过X-Forwarded-For获取用户真实IP
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
#以下是一些反向代理的配置,可选。
proxy_set_header Host $host;
proxy_connect_timeout 90; #nginx跟后端服务器连接超时时间(代理连接超时)
proxy_send_timeout 90; #后端服务器数据回传时间(代理发送超时)
proxy_read_timeout 90; #连接成功后,后端服务器响应时间(代理接收超时)
proxy_set_header X-Forwarded-Proto https;
}
}
}
全文完。