经过本地文件系统提供服务:对css,js文件,图片等静态文件css
缓存:将一些数据常常不变的,缓存到Nginx中,直接给用户提供服务html
负载均衡前端
OpenRestyjava
数据库的服务比较简单,tps和并发远远高于应用服务,全部Nginx能够直接访问数据库提升性能linux
利用nginx强大的并发性能,实现web防火墙等复杂的业务功能;nginx
高并发,高性能:对每个链接使用的内存尽可能少web
可扩展性好:nginx模块化很是稳定使得Nginx第三方模块生态圈丰富。正则表达式
高可靠性:运行时间长,不须要常常重启服务器数据库
热部署:不中止服务下,升级Nginxwindows
BSD许可证:能够修改源代码运行在商业的服务器上是合法的
nginx二进制可执行文件:由各个模块编译出的文件
nginx.conf:配置文件
access.log:记录每一条http请求信息
error.log:错误消息
开源版:nginx.org
商业版:nginx.com(不开源)
Tengine是由淘宝网发起的Web服务器项目。它在Nginx的基础上,针对大访问量网站的需求,添加了不少高级功能和特性。Tengine的性能和稳定性已经在大型的网站如淘宝网,天猫商城等获得了很好的检验。它的最终目标是打造一个高效、稳定、安全、易用的Web平台。
从2011年12月开始,Tengine成为一个开源项目,Tengine团队在积极地开发和维护着它。Tengine团队的核心成员来自于淘宝、搜狗等互联网企业。
缺点:没有办法根据nginx的官方版本同步升级
OpenResty(也称为 ngx_openresty)是一个全功能的 Web 应用服务器。它打包了标准的 Nginx 核心,不少的经常使用的第三方模块,以及它们的大多数依赖项。
开源OpenResty:http://openresty.org
商业版OpenResty:https://openresty.com
windows
直接在官网上下载windows版本便可,安装的目录不要带有中文,不然启动nginx会报错,能够直接运行
linux
首先linux可能须要安装其余的模块(nginx中gzip模块须要zlib库,rewrite模块须要pcre库,ssl功能须要openssl库),若是须要的时候能够来下载...
参考http://www.javashuo.com/article/p-sxzixkwa-m.html
一、nginx下载
wget http://nginx.org/download/nginx-1.16.1.tar.gz
二、编译和安装
参考官方文档:http://nginx.org/en/docs/configure.html
./configure ---prefix=/usr/local/nginx/ 能够指定其余的,不指定就是默认值,执行完成后,会生成objs目录 make 能够在objs目录下看到一个nginx文件,这个文件是为了在版本升级时,不能进行make install,须要将该(nginx)copy到prefix安装目录中sbin目录下 make install 安装完成以后,能够去prefix指定的目录中查看安装后的文件
格式:nginx -s reload 帮助:-?-h 使用指定的配置文件:-c 指定运行目录:-p 发送信号:-s 测试配置文件是否有语法错误:-t -T 打印nginx的版本信息、编译信息等:-v -V
./nginx //启动,若是启动后访问不了,看看是否是防火墙禁止了端口(nginx默认监听80端口) ./nginx -s reload //重载配置文件,在sbin目录下(若是咱们修改了配置文件中的配置(咱们安装nginx的目录中的conf),咱们但愿马上生效,可是不会重启nginx) ./nginx -s stop //关闭
firewall-cmd --list-all :查看防火墙开放的端口
添加对外开放的端口
sudo firewall-cmd --add-port=80/tcp --permanent firewall-cmd -reload 重启防火墙
当咱们的nginx处于运行状态,咱们须要对他进行版本升级
咱们能够将sbin目录中的nginx执行二进制文件备份一下
cp nginx nginx.old
编译好最新的nginx二进制文件去替换sbin目录下的nginx文件(在objs目录中有咱们编译好的nginx,用它来替换sbin目录中nginx)
给正在运行的nginx master进程发送一个信号,咱们须要版本升级了
ps-ef I grep nginx
kill -USR2 13195:此时会新启动一个nginx master进程
kill -WINCH 13195:关闭老的进程,此时的worker process关闭了,可是master process没有关闭是为了若是新版本有问题,方便咱们回退版本
能够写一个脚本,每隔一段时间进行切割日志
#!/bin/bash #Rotate the Nginx logs to prevent a single logfile from consuming too much disk space. LOGS_PATH=/usr/Local/openresty/nginx/logs/history CUR_LOGS_PATH=/usr/Local/openresty/nginx/logs YESTERDAY=$(date -d "yesterday" +%Y-%m-%d) mv ${CUR_LOGS PATH}/taohui_access.1og ${LOGS_PATH}/taohui_access_${YESTERDAY}.1og mv ${CUR_LOGS_PATH}/maomaoxiong_access.1og ${L0GS_PATH}/maomaoxiong_access_${YESTERDAY}.1og mv ${CUR_LOGS_PATH}/error.1og ${LOGS_PATH}/error_${YESTERDAY}.1og ##向Nginx主进程发送USR1信号。USR1信号是从新打开日志文件,1是数字1 kil1-USR1 $(cat /usr/Local/openresty/nginx/Logs/nginx.pid)
event以前的部分:全局块,从配置文件开始到events块之间的内容,主要会设置一些影响nginx服务器总体运行的配置指令
event:events 涉及的指令主要影的 Nginx 服务器与用户的网络链接
http块:
http全局块:配置的指令包括文件引入、MIME-TYPE定义、日志自定义、链接超时时间、单连接请求数上限等。
server块:这块和虚拟主机有密切关系,虚拟主机从用户角度看,和一台独立的硬件主机是彻底同样的,该技术的产生是为了节省互联网服务器硬件成本。
location块:这块的主要做用是基于Nginx 服务器接收到的请求字符串(例如 server_name/uri-string),对虚拟主机名称(也能够是IP别名)以外的字符串(例如前面的/uri-string)进行匹配,对特定的请求进行处理。地址定向、数据缓存和应答控制等功能,还有许多第三方模块的配置也在这里进行。
localtion语法说明
location [=|~|~*|^~] uri{}
一、=:用于不含正则表达式的uri前,要求请求字符串与uri严格匹配,若是匹配成功,就中止继续向下搜索并当即处理该请求。
二、~:用于表示uri包含正则表达式,而且区分大小写。
三、~*:用于表示uri包含正则表达式,而且不区分大小写。
四、^~:用于不含正则表达式的 uri前,要求Nginx 服务器找到标识uri和请求字
########### 每一个指令必须有分号结束。################# #user administrator administrators; #配置用户或者组,默认为nobody nobody。 #worker_processes 2; #容许生成的进程数,默认为1 #pid /nginx/pid/nginx.pid; #指定nginx进程运行文件存放地址 error_log log/error.log debug; #制定日志路径,级别。这个设置能够放入全局块,http块,server块,级别以此为:debug|info|notice|warn|error|crit|alert|emerg events { accept_mutex on; #设置网路链接序列化,防止惊群现象发生,默认为on multi_accept on; #设置一个进程是否同时接受多个网络链接,默认为off #use epoll; #事件驱动模型,select|poll|kqueue|epoll|resig|/dev/poll|eventport worker_connections 1024; #最大链接数 http { include mime.types; #文件扩展名与文件类型映射表 default_type application/octet-stream; #默认文件类型,默认为text/plain #access_log off; #取消服务日志 log_format myFormat '$remote_addr–$remote_user [$time_local] $request $status $body_bytes_sent $http_referer $http_user_agent $http_x_forwarded_for'; #自定义格式 access_log log/access.log myFormat; #combined为日志格式的默认值 sendfile on; #容许sendfile方式传输文件,默认为off,能够在http块,server块,location块。 sendfile_max_chunk 100k; #每一个进程每次调用传输数量不能大于设定的值,默认为0,即不设上限。 keepalive_timeout 65; #链接超时时间,默认为75s,能够在http,server,location块。 upstream mysvr { server 127.0.0.1:7878; server 192.168.10.121:3333 backup; #热备 } error_page 404 https://www.baidu.com; #错误页 server { keepalive_requests 120; //单链接请求上限次数。 listen 4545; //监听端口 server_name 127.0.0.1; //监听地址,能够写成www.xx.com,经过域名访问 location ~*^.+$ { //请求的url过滤,正则匹配,~为区分大小写,~*为不区分大小写。 #root(alias) path; //根目录(能够设置为绝对路径(前端项目工程路径)D:/xx/xx/ 注意路径使用 / ) #index vv.txt; //设置默认页 proxy_pass http://mysvr; //请求转向mysvr 定义的服务器列表 deny 127.0.0.1; //拒绝的ip allow 172.18.5.54; //容许的ip } } }