Nignx快速入门
Nginx快速入门
一、简介
产生的背景:当一台服务器同一时刻被大量客户端请求访问时,访问量超出服务器请求范围,服务器处理不过来,发生宕机或者丢失连接情况下,产生了Nignx反向代理技术。
Nginx是一款轻量级反向代理服务器,占用资源(内存,cpu,磁盘)少,能一次性处理大量的请求,并且运行非常稳定。
官网下载地址:http://nginx.org/en/download.html
淘宝采用TNegine服务器实现反向代理,TNeine是基于Niginx开发的服务器。
京东采用Nginx服务器服务器实现反向代理。
Nginx作用:
1、Http请求处理静态资源(html/js/css)
2、正向代理
3、反向代理+负载均衡
4、动静分离
二、相关概念
高并发
1、同一个时间点通过设计保证系统能够同时并行处理很多请求。通俗点来讲,高并发是指在同一个时间点,有很多用户同时访问同一API接口或者URL地址。它经常会发生在有大活跃用户量,用户高聚焦的业务场景中。
2、负载均衡
将请求/数据集【均匀】分摊到多个操作单元上执行,负载均衡的关键在于【均匀】。
反向代理
客户端访问服务端时,不是直接访问服务端,而是通过Nginx服务器通过一定的规则分发到不同服务访问,并响应给客户端,Nginx代理的是服务端。常用分发规则有轮询、公平分发。轮询就是每个服务器都顺序访问一次,反复按照顺序进行访问,而公平分发就是资源配置高的服务器设置更高的权重,Nginx对该服务器多一点的分发访问。
正向代理
客户端不能直接访问一个目标服务器,而是需要通过代理服务器去访问目标服务器,然后代理服务器响应数据给客户端,代理服务器代理的是客户端。比如:FQ。
三、Nginx安装
官网下载(下载tar.gz文件)并把文件上传服务器相应的文件夹下。
解压文件
cd /usr/nginx/ #进入压缩包文件
tar -zvxf nginx-xxx.tar.gz #解压文件夹
安装nginx依赖环境(c语言环境)
yum install gcc pcre-devel zlib-devel openssl-devel -y
进入压缩包根路径设置安装路径
./configure --prefix=[安装路径]
进行编译和安装操作
make&&make install #编译和安装软件
进入安装目录nginx根目录下的sbin目录
./nginx #默认根据根目录下的conf文件夹下的nginx.conf去启动文件。
./nginx -c [配置文件目录及其文件,文件名必须为nignx.conf] #指定配置文件进行启动
常用的命令
./nginx -s stop #停止服务
./nginx -s reload #服务重启
./nginx -s quit #平稳有序的停止服务
./nginx -t -c [配置文件目录] #检查配置文件是否可用
四、安装目录分析
sbin:启动文件目录
html:静态文件目录
sbin:可执行文件目录
logs:日志文件目录
nignx.conf配置文件分析解释
Nginx中文文档: https://www.nginx.cn/doc/index.html
#运行用户
user nobody;
#启动进程,通常设置成和cpu的数量相等
worker_processes 1;
#全局错误日志及PID文件
#error_log logs/error.log;
#error_log logs/error.log notice;
#error_log logs/error.log info;
#pid logs/nginx.pid;
#工作模式及连接数上限
events {
#epoll是多路复用IO(I/O Multiplexing)中的一种方式,
#仅用于linux2.6以上内核,可以大大提高nginx的性能
use epoll;
#单个后台worker process进程的最大并发链接数
worker_connections 1024;
# 并发总数是 worker_processes 和 worker_connections 的乘积
# 即 max_clients = worker_processes * worker_connections
# 在设置了反向代理的情况下,max_clients = worker_processes * worker_connections / 4 为什么
# 为什么上面反向代理要除以4,应该说是一个经验值
# 根据以上条件,正常情况下的Nginx Server可以应付的最大连接数为:4 * 8000 = 32000
# worker_connections 值的设置跟物理内存大小有关
# 因为并发受IO约束,max_clients的值须小于系统可以打开的最大文件数
# 而系统可以打开的最大文件数和内存大小成正比,一般1GB内存的机器上可以打开的文件数大约是10万左右
# 我们来看看360M内存的VPS可以打开的文件句柄数是多少:
# $ cat /proc/sys/fs/file-max
# 输出 34336
# 32000 < 34336,即并发连接总数小于系统可以打开的文件句柄总数,这样就在操作系统可以承受的范围之内
# 所以,worker_connections 的值需根据 worker_processes 进程数目和系统可以打开的最大文件总数进行适当地进行设置
# 使得并发总数小于操作系统可以打开的最大文件数目
# 其实质也就是根据主机的物理CPU和内存进行配置
# 当然,理论上的并发总数可能会和实际有所偏差,因为主机还有其他的工作进程需要消耗系统资源。
# ulimit -SHn 65535
}
http {
#设定mime类型,类型由mime.type文件定义
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 指令指定 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].";
#设定请求缓冲
client_header_buffer_size 128k;
large_client_header_buffers 4 128k;
#设定虚拟主机配置
server {
# 当listen出现了ip时,server_name就失去了意义。所以不配置也罢了。
#侦听80端口
listen 80;
#定义使用 blog.redis.com.cn访问
server_name blog.redis.com.cn;
#定义服务器的默认网站根目录位置
root html;
#设定本虚拟主机的访问日志
access_log logs/nginx.access.log main;
#默认请求
location / {
#定义首页索引文件的名称
index index.php index.html index.htm;
}
# 定义错误提示页面
error_page 500 502 503 504 /50x.html;
location = /50x.html {
}
#静态文件,nginx自己处理
location ~ ^/(images|javascript|js|css|flash|media|static)/ {
#过期30天,静态文件不怎么更新,过期可以设大一点,
#如果频繁更新,则可以设置得小一点。
expires 30d;
}
#PHP 脚本请求全部转发到 FastCGI处理. 使用FastCGI默认配置.
location ~ .php$ {
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
#禁止访问 .htxxx 文件
location ~ /.ht {
deny all;
}
}
}
五、Nginx负载均衡
配置三台tomcat,修改以下三处的端口号,每个tomcat以下端口号不一样,然后启动,注意开放端口号。(最好使用权重设置)
配置nginx配置文件负载均衡
#配置负载均衡
upstream dbcp{
server 192.168.147.110:9999;
server 192.168.147.110:8080;
server 192.168.147.110:9090;
}
#gzip on;
server {
listen 80;
server_name crm;
charset utf-8;
location / {
# 配置负载均衡
proxy_pass http://dbcp;
proxy_set_header Host $host:$server_port;
proxy_set_header X-Real-IP $remote_addr; #获得用户访问的真实ip地址,并且转发到tomcat中
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Powered-By the-internet;
}
location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$
{
#解决反向代理无法访问图片
proxy_pass http://dbcp;
proxy_set_header Host $host:$server_port;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
expires 30d;
}
location ~ .*\.(js|css)?$
{
#解决反向代理无法访问js,css
proxy_pass http://dbcp;
proxy_set_header Host $host:$server_port;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
expires 12h;
}
在tomcat安装路径的bin目录下 以及nginx安装路径的sbin目录下运行服务
./startup.sh #启动tomcat服务器
./nginx #启动nignx服务器
访问地址
http://[IP地址]:80/站点名
默认负载均衡是请求轮询,以下配置权重,权重越大访问次数越多!
upstream dbcp{
server 192.168.147.110:9999 weight=2;
server 192.168.147.110:8080 weight=5 ;
server 192.168.147.110:9090 weight=10;
}
配置最少连接数,在连接负载最少的情况下,nginx会尽量避免将过多的请求分发给繁忙的应用程序服务器,而是将新请求分发给不太繁忙的服务器,避免服务器过载。
upstream dbcp{
least_conn;
server 192.168.147.110:9999 weight=2;
server 192.168.147.110:8080 weight=5 ;
server 192.168.147.110:9090 weight=10;
}
ipHash 确保来自同一客户端的请求将始终定向到同一台服务器,除非此服务器不可用
upstream dbcp{
ip_hash;
server 192.168.147.110:9999 ;
server 192.168.147.110:8080 ;
server 192.168.147.110:9090 ;
}
六、配置静态资源文件
- Nginx管理本地静态文件
先把静态文件项目放入Linux /home/takeaway 目录下
配置nginx.conf文件
server {
listen 80;
server_name localhost;
location / {
root /home/takeaway;
index index.html index.htm;
}
}
路径路由规则
location = / {
#规 则 A
}
location = /login {
#规 则 B
}
location ^~ /static/ {
#规 则 C
}
location ~ \.(gif|jpg|png|js|css)$ {
#规 则 D
}
location ~* \.png$ {
#规 则 E
}
9. 虚拟主机
虚拟主机使用的是特殊的软硬件技术,它把一台运行在因特网上的服务器主机分成一台台
“虚拟”的主机,每台虚拟主机都可以是一个独立的网站,可以具有独立的域名,具有完整的
Intemet服务器功能(WWW、FTP、Email等),同一台主机上的虚拟主机之间是完全独立
的。从网站访问者来看,每一台虚拟主机和一台独立的主机完全一样。
分类
1、基于域名的虚拟主机,通过域名来区分虚拟主机
2、基于端口的虚拟主机,通过端口来区分虚拟主机
9.1. 基于域名
修改Window的 C:\Windows\System32\drivers\etc\hosts 文件
修改Nginx配置文件
location !~ \.xhtml$ {
#规 则 F
}
location !~* \.xhtml$ {
#规 则 G
}
location / {
#规 则 H
}
访 问 根 目 录 /, 比 如 http://localhost/ 将 匹 配 规 则 A
访 问 http://localhost/login 将 匹 配 规 则 B,
http://localhost/register 则 匹配 规 则 H
访 问 http://localhost/static/a.html 将 匹 配 规 则 C
访 问 http://localhost/a.gif, http://localhost/b.jpg 将 匹 配 规 则 D和 规 则 E,但 是 规 则 D顺 序 优 先 , 规 则 E不 起 作 用 , 而 http://localhost/static/c.png 则 优先 匹 配 到 规 则 C
访 问 http://localhost/a.PNG 则 匹 配 规 则 E, 而 不 会 匹 配 规 则 D, 因 为 规 则 E$不 区 分大 小 写$。
访 问 http://localhost/a.xhtml 不 会 匹 配 规 则 F和 规 则 G,http://localhost/a.XHTML不 会 匹 配 规 则 G, 因 为 不 区 分 大 小 写 。 规 则 F, 规 则 G属 于排 除 法 , 符 合 匹 配 规 则 但 是 不 会 匹 配 到 , 所 以 想 想 看 实 际 应 用 中 哪 里 会 用 到 。
访 问 http://localhost/category/id/1111 则 最 终 匹 配 到 规 则 H, 因 为 以 上 规 则 都不 匹 配 , 这 个 时 候 应 该 是 nginx转 发 请 求 给 后 端 应 用 服 务 器 , 比 如 FastCGI( php) ,tomcat( jsp) , nginx作 为 方 向 代 理 服 务 器 存 在 。
七、虚拟主机
基于域名的虚拟主机(只能在本机进行域名访问)
- 修改
C:\Windows\System32\drivers\etc\hosts
中的本地域名映射名称
192.168.147.110 www.aaa8080.com
192.168.147.110 www.bbb18080.com
nignx配置文件如下:
upstream dbcp{
server 192.168.147.110:9999;
server 192.168.147.110:8080;
server 192.168.147.110:9090;
}
#gzip on;
server {
listen 80;
server_name crm;
charset utf-8;
location / {
# 配置负载均衡
proxy_pass http://dbcp;
proxy_set_header Host $host:$server_port;
proxy_set_header X-Real-IP $remote_addr; #获得用户访问的真实ip地址,并且转发到tomcat中
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Powered-By the-internet;
}
访问:http://www.aaa8080.com/crm 打开项目
- 基于端口的虚拟主机
本地域名映射与以上一致! 修改
C:\Windows\System32\drivers\etc\hosts
中的本地域名映射名称
配置nignx.conf配置信息
http {
upstream bdp8080 {
server 192.168.58.101:8080;
server 192.168.58.102:8080;
server 192.168.58.103:8080;
}
upstream bdp18080 {
server 192.168.58.101:18080;
server 192.168.58.102:18080;
server 192.168.58.103:18080;
}
server {
listen 8080;
server_name www.yjxxt10086.com;
location / {
proxy_pass http://bdp8080;
}
}
server {
listen 18080;
server_name www.yjxxt10086.com;
location / {
proxy_pass http://bdp18080;
}
}
}
访问:http://映射域名:8080[或18080]/站点名 进行基于端口域名访问。
本文来自博客园,作者:戴莫先生Study平台,转载请注明原文链接:https://www.cnblogs.com/smallzengstudy/p/17739903.html