摘要:它的作用是监听后建立的连接,对读写事件进行添加删除。事件处理模型和的非阻塞模型结合在一起使用。
趁着爸妈做年夜饭之前,把之前做的笔记贴出来,新的一年到了,祝大家 Nginx + Node + Vue 部署初试
知乎
个人博客
Github
日常学习笔记
Nginx定义
异步框架的 Web服务器,也可以用作反向代理,负载平衡器 , HTTP缓存, 媒体流等的开源软件。它最初是一个旨在实现最高性能和稳定性的Web服务器。除了HTTP服务器功能外,NGINX还可以用作电子邮件(IMAP,POP3和SMTP)的代理服务器以及HTTP,TCP和UDP服务器的反向代理和负载平衡器。
特点
更快
高扩展性, Nginx的模块都是嵌入到二进制文件中执行
高可靠性
低内存消耗
单机支持10万次的并发连接
热部署, master管理进行与work工作进程分离设计,因此具备热部署功能
最自由的BSD许可协议
功能
静态服务(css , js , html, images, videos)
SSL 和 TLS SNI 支持
HTTP/HTTPS, SMTP, IMAP/POP3 反向代理
FastCGI反向代理
负载均衡
页面缓存(CDN)
支持gzip、expirse
支持 keep-alive 和管道连接
基于 PCRE 的 rewrite 重写模块
带宽限制
基于IP 和名称的虚拟主机服务
支持访问速率、并发限制
反向代理(适用2000WPV、并发连接1W/秒),简单的负载均衡和容错
基于客户端 IP 地址和 HTTP 基本认证的访问控制
Mac 安装Nginx// 推荐使用`brew`, 安装`homebrew` /usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)" // Homebrew 安装 Nginx brew install nginx // Mac 下 Nginx的目录 cd /usr/local/etc/nginx ll -al vim nginx.conf
homebrew详见
Nginx 参数列表配置参数属性 | 解释说明 | 参数列表 | ||||
---|---|---|---|---|---|---|
user | 设置nginx服务的系统使用用户 |
nobody(注意:此处用户如果比启动Nginx的用户权限低,你需要使用当前用户重启Nginx) nginx -s stop 关闭nginx-> nginx 启动-> `ps aux |
grep nginx`查看启动用户 | |||
worker_processes | 开启的线程数 | 一般与服务器核数保持一致 | ||||
error_log | 定位全局错误日志文件 | 错误日志定义等级,[ debug | info notice | warn | error | crit ],debug输出最多,crir输出最少 |
pid | 指定进程id的存储文件位置 | |||||
worker_rlimit_nofile | 指定一个nginx进程打开的最多文件描述符数目,受系统进程的最大打开文件数量限制 | |||||
events | 包含Nginx中所有处理连接的设置 | |||||
http | Nginx http处理的所有核心特性 |
Nginx是以event(事件)处理模型为基础的模块。它为了支持跨平台,抽象出了event模块。它支持的event处理类型有:AIO(异步IO),/dev/poll(Solaris 和Unix特有),epoll(Linux特有),eventport(Solaris 10特有),kqueue(BSD特有),poll,rtsig(实时信号),select等。
它的作用是监听accept后建立的连接,对读写事件进行添加删除。事件处理模型和Nginx的非阻塞IO模型结合在一起使用。当IO可读可写的时候,相应的读写事件就会被唤醒,此时就会去处理事件的回调函数。
配置参数属性 | 解释说明 | 参数列表 | ||||||
---|---|---|---|---|---|---|---|---|
worker_connections | 定义每个进程的最大连接数,受系统进程的最大打开文件数量限制 | 单个后台worker process进程的最大并发链接数 (最大连接数= worker_processes worker_connections) 在反向代理环境下: 最大连接数 = worker_processes worker_connections / 4 |
||||||
use | 选择一个可用的事件的模型(可以在编译时指定),Nginx会自动选择事件的模型 | [ epoll | /dev/poll | poll | eventport | kqueue | select | rtsig ] |
multi_accept | 一个新连接通知后接受尽可能多的连接 | on / off | ||||||
accept_mutex | 开启或者禁用使用互斥锁来打开sockets | on / off |
Event Use支持的事件模型
Events详见
HTTP可以嵌套多个server,配置代理,缓存,日志定义等绝大多数功能和第三方模块的配置。
配置参数属性 | 解释说明 | 参数列表 |
---|---|---|
include | 主模块指令,实现对配置文件所包含的文件的设定,可以减少主配置文件的复杂度,DNS主配置文件中的zonerfc1912,acl基本上都是用include语句 | |
default_type | 核心模块指令 | 默认设置为二进制流,也就是当文件类型未定义时使用这种方式 |
log_format | 日志格式的设定 | 日志格式的名称,可自行设置,后面引用 |
access_log | 引用日志 | 引用log_format设置的名称 |
keepalive_timeout | 设置客户端连接保存活动的超时时间 | 0是无限制 |
sendfile | 开启高效文件传输模式 | on / off |
tcp_nopush | 开启防止网络阻塞 | on / off |
tcp_nodelay | 开启防止网络阻塞 | on / off |
upstream | 负载均衡 | |
server | Nginx的server虚拟主机配置 |
它的作用是实现在轮询和客户端IP之间的后端服务器负荷平衡。
配置参数属性 | 解释说明 |
---|---|
轮询(默认) | 当weight不指定时,各服务器weight相同,每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器down掉,能自动剔除。 |
weight | 指定轮询几率,weight和访问比率成正比,用于后端服务器性能不均的情况 |
ip_hash | 每个请求按访问ip的hash结果分配,这样每个访客固定访问一个后端服务器,可以解决session的问题。 |
fair(第三方) | 按后端服务器的响应时间来分配请求,响应时间短的优先分配。 |
url_hash(第三方) | 按访问url的hash结果来分配请求,使每个url定向到同一个后端服务器,后端服务器为缓存时比较有效。 |
weight 默认为1.weight越大,负载的权重就越大。
例如:
upstream news { server 127.0.0.1:9527 backup; server 127.0.0.1:9527 weight=1 max_fails=2 fail_timeout=3; ... }
配置参数属性 | 解释说明 |
---|---|
backup | 预留的备份服务器 |
down | 当前的server暂时不参与负载均衡 |
fail_timeout | 经过max_fails 失败后,服务暂停的时间 |
max_conns | 限制最大的接收的连接数 |
max_fails | 允许请求失败的次数 |
use location:在server中添加
proxy_pass http://127.0.0.1:9527; // 因为我的API接口是这个,such as /api/profile // location 具体匹配规则详见后面 location ~ /api/ { proxy_pass http://127.0.0.1:9527; }Server
配置虚拟主机的相关参数,一个http中可以有多个server。
配置参数属性 | 解释说明 | 参数列表 |
---|---|---|
listen | 监听端口 | http -> 80 / https -> 443 |
server_name | 设置主机域名 | localhost |
charset | 设置访问的语言编码 | |
access_log | 设置虚拟主机访问日志的存放路径及日志的格式 | |
location | 设置虚拟主机的基本信息 |
配置请求的路由,以及各种页面的处理情况。
配置参数属性 | 解释说明 | 参数列表 |
---|---|---|
root | 设置虚拟主机的网站根目录 | Vue项目的根目录/Users/rainy/Desktop/MyWork/Work/cloudwiz-website/dist |
index | 设置虚拟主机默认访问的网页 | index.html index.htm |
proxy | 通过不同协议将请求从NGINX传递到代理服务器 |
=: 开头表示精确匹配,如 api 中只匹配根目录结尾的请求,后面不能带任何字符串.
^~ :开头表示uri以某个常规字符串开头,不是正则匹配.
~: 开头表示区分大小写的正则匹配.
~*: 开头表示不区分大小写的正则匹配.
/ : 通用匹配, 如果没有其它匹配,任何请求都会匹配到.
匹配优先级(高到低)
location =
location 完整路径
location ^~ 路径
location ~,~* 正则顺序
location 部分起始路径
/
详见Location配置
Reverse Proxy当NGINX代理请求时,它会将请求发送到指定的代理服务器,获取响应并将其发送回客户端。可以使用指定的协议将请求代理到HTTP服务器(另一个NGINX服务器或任何其他服务器)或非HTTP服务器(可以运行使用特定框架(如PHP或Python)开发的应用程序)。
location / some / path / { proxy_pass http://www.example.com:8080; proxy_set_header Host $ host ; proxy_set_header X-Real-IP $ remote_addr ; // 禁用特定位置的缓冲 proxy_buffering off ; proxy_buffers 16 4k ; proxy_buffer_size 2k ; proxy_bind 127.0.0.2 ; // IP地址也可以用变量指定 }
将请求传递给非HTTP代理服务器,**_pass应使用相应的指令:
fastcgi_pass 将请求传递给FastCGI服务器
uwsgi_pass 将请求传递给uwsgi服务器
scgi_pass 将请求传递给SCGI服务器
memcached_pass 将请求传递给memcached服务器
配置参数属性 | 解释说明 | 参数列 |
---|---|---|
proxy_pass | 将请求传递给HTTP代理服务器 | |
proxy_set_header | 传递请求标头 | 默认情况下,NGINX在代理请求中重新定义两个头字段“Host”和“Connection”,并删除其值为空字符串的头字段。“Host”设置为$proxy_host变量,“Connection”设置为close。 |
proxy_buffering | 负责启用和禁用缓冲 | on / off |
proxy_buffers | 请求分配的缓冲区的大小和数量 | |
proxy_buffer_size | 代理服务器的响应的第一部分存储在多带带的缓冲区大小 | 通常包含一个相对较小的响应头,并且可以比其余响应的缓冲区小。 |
proxy_bind | 接受来自特定IP网络或IP地址范围的连接 | 指定proxy_bind必要网络接口的指令和IP地址 |
详见Proxy
全局变量Global Variable变量名 | 变量含义 |
---|---|
$args | 请求中的参数 |
$content_length | HTTP请求信息里的Content-Length |
$content_type | 请求信息里的Content-Type |
$host | 请求信息中的Host,如果请求中没有Host行,则等于设置的服务器名 |
$http_cookie | cookie 信息 |
$http_referer | 引用地址 |
$http_user_agent | 客户端代理信息 |
$remote_addr | 客户端地址 |
$remote_port | 客户端端口号 |
$remote_user | 客户端用户名,认证用 |
$request_method | 请求的方法,比如GET、POST等 |
$request_uri | 完整的原始请求URI(带参数) |
$scheme | 请求方案,http或https |
$server_addr | 接受请求的服务器的地址,如果没有用listen指明服务器地址,使用这个变量将发起一次系统调用以取得地址(造成资源浪费); |
$server_protocol | 请求的协议版本,HTTP/1.0或HTTP/1.1 |
$uri | 请求中的当前URI, $uri在请求处理期间 ,值可能会发生变化,例如在执行内部重定向或使用索引文件时 |
全局变量详见Alphabetical index of variables
修改 http server中的配置
启动Nginx
nginx ps -ef | grep nginx
重新加载修改后的Nginx配置文件
nginx -s reload
多谢小伙伴给提出的问题(详见评论区),reload和resatrt是两个不同的概念。
reload
重新加载conf文件,不中断Nginx服务,conf文件有问题则加载上一次的conf.
restart
会根据配置文件,重启整个Nginx服务,造成服务器中断一段时间,当然会因为conf文件问题报错。
关闭Nginx
nginx -s stop
因为我已经启动了,所以就重启一下Nginx即可
Linux安装NginxLinux安装
常见的Linux命令
使用pstree查看当前服务器启动的进程
pstree
查找Nginx的位置
ps -aux | grep nginx
进入nginx的目录
然后配置nginx.conf文件即可
http { upstream add-news { server 127.0.0.1:9527; } server { listen 8080; server_name localhost; #charset koi8-r; #access_log logs/host.access.log main; root /Users/rainy/Desktop/MyWork/Work/website/dist; index index.html index.htm; location / { # root html; try_files $uri $uri/ @router; index index.html index.htm; } location @router { rewrite ^.*$ /index.html last; } location ~ /api/ { proxy_pass http://127.0.0.1:9527; } # 我的图片存放在本地服务器上的路径
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/40313.html
摘要:部署项目写在前面作为轻量级虚拟化技术,拥有持续集成版本控制可移植性隔离性和安全性等优势。容器可以被创建启动停止删除暂停等。重新运行应用容器直接基于镜像来启动容器,运行命令将宿主机的挂载到容器的目录上。Docker 部署 vue 项目 1.写在前面: Docker 作为轻量级虚拟化技术,拥有持续集成、版本控制、可移植性、隔离性和安全性等优势。本文使用Docker来部署一个vue的前端应用,并尽...
摘要:一个百度开发者账号,而且里面应该要有钱哦。好了,应该就是上面那几个,下面我们开始,一在百度开发云上创建应用对了应该去哪里创建呢,走你。访问配置断线重连我们可以建一个这样的配置,应用启动时初始化。好了,现在我们可以体验百度云的乐趣了。 准备工作 一个基于nodejs的应用。 一个百度开发者账号,而且里面应该要有钱哦。 代码上传管理工具git或者svn。 好了,应该就是上面那几个,下面我...
摘要:首先,的命令和并不能在全局使用。文章有意将浏览器不能访问服务器的两个问题写出来,是因为作者在排查问题的时候,发现在服务器直接访问的页面,能很好地检查排除问题在百度寻找问题答案的时候,发现这种做法也得到了不少人的肯定。 前段时间要把项目部署到服务器,期间踩了不少的坑。故写下这篇文章,从零开始把自己部署的过程都记录下来,希望能给其他像我一样的小白一点帮助。如果有疏漏的地方,请各位客官指出,...
阅读 2664·2023-04-25 20:19
阅读 1908·2021-11-24 09:38
阅读 1611·2021-11-16 11:44
阅读 4239·2021-09-02 15:40
阅读 1296·2019-08-30 15:55
阅读 2001·2019-08-30 15:52
阅读 3739·2019-08-29 17:20
阅读 2208·2019-08-29 13:48