网站建设实施方案/旺道seo推广系统怎么收费
前言:Nginx常常被我们用来做反向代理或者负载均衡服务器,在微服务架构里也在API网关之上用作网关集群的负载均衡。
一、Nginx简介
1.1、什么是Nginx
Nginx 是一个高性能的 HTTP 和反向代理Web服务器,特点是占用内存少,并发能力强。事实上 nginx 的并发能力确实在同类型的网页服务器中表现较好,在高连接并发的情况下,Nginx是Apache服务器不错的替代品。
Nginx是伊戈尔·赛索耶夫为俄罗斯访问量第二的rambler.ru站点设计开发的。从2004年发布至今,凭借开源的力量,已经接近成熟与完善。Nginx 专为性能优化而开发,性能是其最重要的要求,十分注重效率,有报告 Nginx 能支持高达 50000 个并发连接数。
1.2、Nginx常用功能
①反向代理
正向代理:局域网中的电脑用户想要直接访问网络是不可行的,只能通过代理服务器来访问,这种代理服务就被称为正向代理。
反向代理:客户端无法感知代理,因为客户端访问网络不需要配置,只要把请求发送到反向代理服务器,由反向代理服务器去选择目标服务器获取数据,然后再返回到客户端,此时反向代理服务器和目标服务器对外就是一个服务器,暴露的是代理服务器地址,隐藏了真实服务器 IP 地址
②负载均衡
普通请求和响应过程:客户端发送多个请求到服务器,服务器处理请求,有一些可能要与数据库进行交互,服务器处理完毕之后,再将结果返回给客户端。但是随着信息数量增长,访问量和数据量飞速增长,普通架构无法满足现在的需求。我们首先想到的是升级服务器配置,可以由于摩尔定律的日益失效,单纯从硬件提升性能已经逐渐不可取了,怎么解决这种需求呢?
我们可以增加服务器的数量,构建集群,将请求分发到各个服务器上,将原来请求集中到单个服务器的情况改为请求分发到多个服务器,也就是我们说的负载均衡。 假设有 15 个请求发送到代理服务器,那么由代理服务器根据服务器数量,平均分配,每个服务器处理 5 个请求,这个过程就叫做负载均衡
③ 动静分离
为了加快网站的解析速度,可以把动态页面和静态页面交给不同的服务器来解析,加快解析的速度,降低由单个服务器的压力
二、Nginx安装和常用命令
2.1、Linux下安装Nginx
centos7下安装nginx
centOS7安装nginx及nginx配置
安装完成后,去usr/local/nginx/sbin下,执行./nginx启动Nginx,然后浏览器输入ip地址访问就可以看到如下画面:
2.2、Nginx常用命令
查看版本
./nginx -v
启动
./nginx
关闭(有两种方式,推荐使用 ./nginx -s quit)
./nginx -s stop./nginx -s quit
检查配置文化nginx.conf格式的正确性命令
./nginx -t
重新加载 nginx 配置
./nginx -s reload
三、Nginx配置文件详解
安装好Nginx后,打开conf文件夹的nginx.conf文件,Nginx服务器的基础配置,默认的配置也存放在此。
默认的Nginx 配置文件 nginx.conf 内容如下:
#user nobody;
worker_processes 1;#error_log logs/error.log;
#error_log logs/error.log notice;
#error_log logs/error.log info;#pid logs/nginx.pid;events {worker_connections 1024;
}http {include mime.types;default_type application/octet-stream;#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 on;#tcp_nopush on;#keepalive_timeout 0;keepalive_timeout 65;#gzip on;server {listen 80;server_name localhost;#charset koi8-r;#access_log logs/host.access.log main;location / {root html;index index.html index.htm;}#error_page 404 /404.html;# redirect server error pages to the static page /50x.html#error_page 500 502 503 504 /50x.html;location = /50x.html {root html;}# proxy the PHP scripts to Apache listening on 127.0.0.1:80##location ~ \.php$ {# proxy_pass http://127.0.0.1;#}# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000##location ~ \.php$ {# root html;# fastcgi_pass 127.0.0.1:9000;# fastcgi_index index.php;# fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name;# include fastcgi_params;#}# deny access to .htaccess files, if Apache's document root# concurs with nginx's one##location ~ /\.ht {# deny all;#}}# another virtual host using mix of IP-, name-, and port-based configuration##server {# listen 8000;# listen somename:8080;# server_name somename alias another.alias;# location / {# root html;# index index.html index.htm;# }#}# HTTPS server##server {# listen 443 ssl;# server_name localhost;# ssl_certificate cert.pem;# ssl_certificate_key cert.key;# ssl_session_cache shared:SSL:1m;# ssl_session_timeout 5m;# ssl_ciphers HIGH:!aNULL:!MD5;# ssl_prefer_server_ciphers on;# location / {# root html;# index index.html index.htm;# }#}}
3.1、配置文件结构组成
... #全局块events { #events块...
}http #http块
{... #http全局块server #server块{ ... #server全局块location [PATTERN] #location块{...}location [PATTERN] {...}}server{...}... #http全局块
}
全局块:从配置文件开始到 events 块之间,主要是设置一些影响 nginx 服务器整体运行的配置指令。一般有运行nginx服务器的用户组,nginx进程pid存放路径,日志存放路径,配置文件引入,允许生成worker process数等。
events块:配置影响nginx服务器或与用户的网络连接。有每个进程的最大连接数,选取哪种事件驱动模型处理连接请求,是否允许同时接受多个网路连接,开启多个网络连接序列化等。
http块:作为web服务器,http模块是nginx最核心的一个模块,配置项也是比较多的,项目中会设置到很多的实际业务场景。可以嵌套多个server,配置代理,负载均衡、缓存,日志定义等绝大多数功能和第三方模块的配置。如文件引入,mime-type定义,日志自定义,是否使用sendfile传输文件,连接超时时间,单连接请求数等。
server块:配置虚拟主机的相关参数,一个http中可以有多个server。
location块:配置请求的路由,以及各种页面的处理情况。
3.2、location 指令说明
-
该语法用来匹配 url,语法如下
location\[ = | ~ | ~\* | ^~\] url{}
-
=: 用于不含正则表达式的 url 前,要求字符串与 url 严格匹配,匹配成功就停止向下搜索并处理请求
-
~:用于表示 url 包含正则表达式,并且区分大小写。
-
~*:用于表示 url 包含正则表达式,并且不区分大小写
-
^~:用于不含正则表达式的 url 前,要求 ngin 服务器找到表示 url 和字符串匹配度最高的 location 后,立即使用此 location 处理请求,而不再匹配
-
如果有 url 包含正则表达式,不需要有~ 开头标识
-
^~:表示匹配时,只需开头部分匹配上即可,如 location ^~ /uri/ {…} ,这时只要以/uri/开头的地址都会匹配上。
@:表示nginx内部的重定向,不直接处理用户的请求,如 location @error {…} , 这时可以另一个location内部,
重定向到@error路径,如 location ~ /test {error_page 404 @error}。
# 通用匹配,任何请求都会匹配到
location / {...
}--------------------------------------------------
# 严格区分大小写,匹配以.php结尾的都走这个location
location ~ \.php$ {...
}# 严格区分大小写,匹配以.jsp结尾的都走这个location
location ~ \.jsp$ {...
}# 不区分大小写匹配,只要用户访问.jpg,gif,png,js,css 都走这条location
location ~* .*\.(jpg|gif|png|js|css)$ {...
}# 不区分大小写匹配
location ~* "\.(sql|bak|tgz|tar.gz|.git)$" {...
}
3.3、配置文件示例,作为理解
每个指令必须有分号结束,在 nginx.conf 的注释符号为:#
#运行用户
user www-data;
#启动进程,通常设置成和cpu的数量相等(允许生成的进程数,默认为1)
worker_processes 1;#全局错误日志及PID文件
error_log /var/log/nginx/error.log;
pid /var/run/nginx.pid;#工作模式及连接数上限
events {use epoll; #epoll是多路复用IO(I/O Multiplexing)中的一种方式,但是仅用于linux2.6以上内核,可以大大提高nginx的性能worker_connections 1024;#单个后台worker process进程的最大并发链接数# multi_accept on; #设置一个进程是否同时接受多个网络连接,默认为offaccept_mutex on; #设置网路连接序列化,防止惊群现象发生,默认为on
}#设定http服务器,利用它的反向代理功能提供负载均衡支持
http {#设定mime类型,类型由mime.type文件定义include /etc/nginx/mime.types;default_type application/octet-stream;#设定日志格式access_log /var/log/nginx/access.log;#sendfile 指令指定 nginx 是否调用 sendfile 函数(zero copy 方式)来输出文件,对于普通应用,#必须设为 on,如果用来进行下载等应用磁盘IO重负载应用,可设置为 off,以平衡磁盘与网络I/O处理速度,降低系统的uptime.sendfile on;#tcp_nopush on;#连接超时时间#keepalive_timeout 0;keepalive_timeout 65;tcp_nodelay on;#开启gzip压缩gzip on;gzip_disable "MSIE [1-6]\.(?!.*SV1)";#设定请求缓冲client_header_buffer_size 1k;large_client_header_buffers 4 4k;include /etc/nginx/conf.d/*.conf;include /etc/nginx/sites-enabled/*;#设定负载均衡的服务器列表upstream mysvr {#weigth参数表示权值,权值越高被分配到的几率越大#本机上的Squid开启3128端口server 192.168.8.1:3128 weight=5;server 192.168.8.2:80 weight=1;server 192.168.8.3:80 weight=6;}server {#侦听80端口listen 80;#定义使用www.xx.com访问server_name www.xx.com;#设定本虚拟主机的访问日志access_log logs/www.xx.com.access.log main;#默认请求进行负载均衡location / {root /root; #定义服务器的默认网站根目录位置index index.php index.html index.htm; #定义首页索引文件的名称proxy_pass http://mysvr; #请求转向mysvr 定义的服务器列表deny 127.0.0.2; #拒绝的ipallow 172.18.5.54; #允许的ip }# 定义错误提示页面error_page 500 502 503 504 /50x.html; location = /50x.html {root /root;}#静态文件,nginx自己处理location ~ ^/(images|javascript|js|css|flash|media|static)/ {root /var/www/virtual/htdocs;#过期30天,静态文件不怎么更新,过期可以设大一点,如果频繁更新,则可以设置得小一点。expires 30d;}#设定查看Nginx状态的地址location /NginxStatus {stub_status on;access_log on;auth_basic "NginxStatus";auth_basic_user_file conf/htpasswd;}#禁止访问 .htxxx 文件location ~ /\.ht {deny all;}
}}
upstream模块:主要负责负载均衡的配置,定义上游服务器集群,在反向代理中proxy_pass使用,用于负载均衡。通过默认的轮询调度方式来分发请求到后端服务器。
惊群现象:一个网路连接到来,多个睡眠的进程被同时叫醒,但只有一个进程能获得链接,这样会影响系统性能。
参考链接:
搞懂Nginx一篇文章就够了
Nginx配置文件详细说明
Nginx 常用配置清单
nginx集群搭建方案(教你如何搭建nginx集群)