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. 安装vscode

    1.下载vscode安装包 因为vscode官网下载太慢, 所以从360的软件库下载: https://baoku.360.cn/soft/search?kw=vscode 2.直接点击安装 3.设置 ...

  2. 组合的输出 题解(lgP1157)

    一看就是 dfs 然而窝并不会做 调了一个多小时才调出来.漏洞连篇.(第一次写的基本没有对的地方QAQ 题解见注释. #include<bits/stdc++.h> using names ...

  3. Golang后端大厂面经!

    大家好,我是阳哥.专注Go语言的学习经验分享和就业辅导. 之前分享了很多 Golang 后端的大厂面经,不少同学在催更新,这篇给大家继续安排. 本文来自一位同学的投稿,面试深X服的面经汇总,前半部分主 ...

  4. P7073 [CSP-J2020] 表达式

    Problem 考察算法:后缀表达式建树,优化. 题目简述 读入一个后缀表达式,由 \(\&,\mid,!\) 三种运算和操作数构成. 有 \(q\) 次询问,每次输入一个下标 \(i\) , ...

  5. 接口开放太麻烦?试试阿里云API网关吧

    前言 我在多方合作时,系统间的交互是怎么做的?这篇文章中写过一些多方合作时接口的调用规则和例子,然而,接口开放所涉及的安全.权限.监控.流量控制等问题,可不是简简单单就可以解决的,这一般需要专业的开放 ...

  6. 在Window系统中安装VMware虚拟机搭建Linux服务器

    1.什么是VMware Workstation VMware Workstation Pro是一款桌面虚拟化软件.我们可以通过Workstation Pro在Windows或Linux PC上运行多个 ...

  7. Mockito - java单元测试

    原文地址 一.简介 Mockito是mocking框架,它让你用简洁的API做测试,简单易学,可读性强并且验证语法简洁. 官网: http://mockito.org 项目源码:https://git ...

  8. 聊聊分布式 SQL 数据库Doris(七)

    LSM-Tree Doris的存储结构是类似LSM-Tree设计的,因此很多方面都是通用的,先阅读了解LSM相关的知识,再看Doris的底层存储与读取流程会清晰透彻很多,如下是几个关键的设计: SST ...

  9. MarkdownPad 文件访问权限受限导致软件打开后不久闪退解决方法

    近几天发现MarkdownPad有一些小问题,打开时会弹出以下报错信息,告诉你打开文件的权限不够 解决方法如下: 1.复制报错信息中的文件路径"Access to the path 'C:\ ...

  10. Vue源码学习(十八):实现组件注册(一)Vue.component()和Vue.extend()

    好家伙, 0.完整代码已开源 https://github.com/Fattiger4399/analytic-vue.git 1.思路 1.1.什么是组件化? Vue 组件化是指将复杂的应用程序拆分 ...