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文件)并把文件上传服务器相应的文件夹下。

http://nginx.org/en/download.html

解压文件

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目录

./nignx  #默认根据根目录下的conf文件夹下的nginx.conf去启动文件。
./nignx -c [配置文件目录及其文件,文件名必须为nignx.conf] #指定配置文件进行启动

常用的命令

./nignx -s stop #停止服务
./nignx -s reload #服务重启
./nginx -s quit #平稳有序的停止服务
./nignx -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]/站点名 进行基于端口域名访问。

Nignx快速入门的更多相关文章

  1. Nginx快速入门菜鸟笔记

    Nginx快速入门-菜鸟笔记   1.编译安装nginx 编译安装nginx 必须先安装pcre库. (1)uname -a 确定环境 Linux localhost.localdomain 2.6. ...

  2. Web Api 入门实战 (快速入门+工具使用+不依赖IIS)

    平台之大势何人能挡? 带着你的Net飞奔吧!:http://www.cnblogs.com/dunitian/p/4822808.html 屁话我也就不多说了,什么简介的也省了,直接简单概括+demo ...

  3. SignalR快速入门 ~ 仿QQ即时聊天,消息推送,单聊,群聊,多群公聊(基础=》提升)

     SignalR快速入门 ~ 仿QQ即时聊天,消息推送,单聊,群聊,多群公聊(基础=>提升,5个Demo贯彻全篇,感兴趣的玩才是真的学) 官方demo:http://www.asp.net/si ...

  4. 前端开发小白必学技能—非关系数据库又像关系数据库的MongoDB快速入门命令(2)

    今天给大家道个歉,没有及时更新MongoDB快速入门的下篇,最近有点小忙,在此向博友们致歉.下面我将简单地说一下mongdb的一些基本命令以及我们日常开发过程中的一些问题.mongodb可以为我们提供 ...

  5. 【第三篇】ASP.NET MVC快速入门之安全策略(MVC5+EF6)

    目录 [第一篇]ASP.NET MVC快速入门之数据库操作(MVC5+EF6) [第二篇]ASP.NET MVC快速入门之数据注解(MVC5+EF6) [第三篇]ASP.NET MVC快速入门之安全策 ...

  6. 【番外篇】ASP.NET MVC快速入门之免费jQuery控件库(MVC5+EF6)

    目录 [第一篇]ASP.NET MVC快速入门之数据库操作(MVC5+EF6) [第二篇]ASP.NET MVC快速入门之数据注解(MVC5+EF6) [第三篇]ASP.NET MVC快速入门之安全策 ...

  7. Mybatis框架 的快速入门

    MyBatis 简介 什么是 MyBatis? MyBatis 是支持普通 SQL 查询,存储过程和高级映射的优秀持久层框架.MyBatis 消除 了几乎所有的 JDBC 代码和参数的手工设置以及结果 ...

  8. grunt快速入门

    快速入门 Grunt和 Grunt 插件是通过 npm 安装并管理的,npm是 Node.js 的包管理器. Grunt 0.4.x 必须配合Node.js >= 0.8.0版本使用.:奇数版本 ...

  9. 【第一篇】ASP.NET MVC快速入门之数据库操作(MVC5+EF6)

    目录 [第一篇]ASP.NET MVC快速入门之数据库操作(MVC5+EF6) [第二篇]ASP.NET MVC快速入门之数据注解(MVC5+EF6) [第三篇]ASP.NET MVC快速入门之安全策 ...

  10. 【第四篇】ASP.NET MVC快速入门之完整示例(MVC5+EF6)

    目录 [第一篇]ASP.NET MVC快速入门之数据库操作(MVC5+EF6) [第二篇]ASP.NET MVC快速入门之数据注解(MVC5+EF6) [第三篇]ASP.NET MVC快速入门之安全策 ...

随机推荐

  1. macbook-键盘连击问题001

    最近一段时间,我的笔记本(17年款 macbook pro 13寸)经常出现键盘连击问题. 最大的表现是 e/n/i 这几个按键,按下的时候,会有概率的出现两个或三个. 这不是个案 搜索了一下,有不少 ...

  2. [第五空间 2021]yet_another_mysql_injection

    随便输入进去,发现只有账号是admin可以进入 使用弱密码admin admin,报错为hacker 就没啥办法了,想着F12看一下源码 发现有一个source,打开看看 可以发现username是固 ...

  3. 12. 用Rust手把手编写一个wmproxy(代理,内网穿透等), TLS的双向认证信息及token验证

    12. 用Rust手把手编写一个wmproxy(代理,内网穿透等), TLS的双向认证信息及token验证 项目 ++wmproxy++ gite: https://gitee.com/tickbh/ ...

  4. 基于jquery+html开发的json格式校验工具

    json简介 JSON是一种轻量级的数据交换格式. 易于人阅读和编写.同时也易于机器解析和生成. 它基于JavaScript Programming Language, Standard ECMA-2 ...

  5. python 远程操作svn

    SVN操作脚本 安装模块 pip install pywinrm 脚本如下 #!/usr/bin/env python3 # coding=utf-8 # author:LJX # describe: ...

  6. 22. 从零用Rust编写正反向代理,一个数据包的神奇HTTP历险记!

    wmproxy wmproxy已用Rust实现http/https代理, socks5代理, 反向代理, 静态文件服务器,四层TCP/UDP转发,内网穿透,后续将实现websocket代理等,会将实现 ...

  7. 理解maven命令package、install、deploy的联系与区别(转)

    https://blog.csdn.net/zhaojianting/article/details/80324533 我们在用maven构建java项目时,最常用的打包命令有mvn package. ...

  8. JVM Stack and Frame

    Overview Sharing a single thread within the district: PC Register/JVM Stack/Native Method Stack.All ...

  9. Python 文件处理指南:打开、读取、写入、追加、创建和删除文件

    文件处理是任何Web应用程序的重要部分.Python有多个用于创建.读取.更新和删除文件的函数. 文件处理 在Python中处理文件的关键函数是open()函数.open()函数接受两个参数:文件名和 ...

  10. Android 锁屏时的生命周期

    锁定屏幕前,应用被打开:onCreate->onStart->onResume 此时按下电源键,锁定屏幕:onPause->onStop 解锁屏幕,重新回到应用:onRestart- ...