1.nginx学习
我们平时访问的网络网站就是WEB网络服务,允许用户通过浏览器访问互联网中的各种资源服务
WEB服务器会通过HTTP或者HTTPS的方式将请求内容传递给客户端
目前常见的WEB服务有IIS, Nginx和Apache等
WEB服务器和WEB框架的区别
- WEB服务器:接收HTTP请求并返回数据
- WEB框架:开发WEB应用程序,处理接收到的HTTP请求
Nginx特点:
开源免费
高性能,高并发
支持几万并发连接
资源消耗少,在3万并发连接下开启10个nginx线程消耗的内存不到200M
安装灵活,使用方便
功能丰富
反向代理
负载均衡
缓存服务
访问日志
1.安装
- nginx 官方nginx
- tenginx 淘宝nginx
- 这2个一模一样,我这里采用后者,并且采用源代码安装
- 下载源代码
- wget http://tengine.taobao.org/download/tengine-2.3.2.tar.gz
- 解压缩
- tar -zxvf tengine-2.3.2.tar.gz
- 指定安装目录,检查编译环境
先更新本地依赖页
- sudo apt-get update
- sudo apt-get install build-essential zlib1g-dev libpcre3 libpcre3-dev libssl-dev libxslt1-dev libxml2-dev libgeoip-dev libperl-dev libtool
- sudo apt-get install openssl
- ./configure --prefix=/opt/tng232
- sudo apt-get update
- make进行编译
- sudo make
- 生成可执行文件
- sudo make install
- 配置环境变量
- sudo vim /etc/profile
- PATH="/opt/python390/bin/:/opt/tng232/sbin:/home/parallels/.local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin"
- source /etc/profile
2.常用命令
第一次启动
- nginx -c /../nginx.conf # 指定启动的配置文件,不指定nginx会自动加载默认路径的配置文件
平滑启动
- sudo nginx -s reload -c /opt/tng232/conf/nginx.conf # 平滑启动,重新读取nginx配置文件,不重启nginx进程
停止进程
- nginx -s stop -c /opt/tng232/conf/nginx.conf # 停止nginx进程
检查Nginx配置文件语法
- nginx -t -c /opt/tng232/conf/nginx.conf
启动后可以访问
- http://10.211.55.5:80
3.学习配置文件
配置文件在nginx安装的conf目录
- nginx的配置文件是C语言风格的, 以 ;结束每一行的配置
- 配置文件是以代码块的形式编写的
- 主要有以下几个模块
- http{} # 里面定义了多个代码块,是nginx的核心配置点
- server{} # 虚拟主机代码块,定义了监听端口等
- location{} # 域名匹配代码块
- #user nobody;
- # 定义nginx的工作进程数 以CPU核数为准
- worker_processes 5;
- # 以下是日志功能
- error_log logs/error.log;
- #error_log logs/error.log notice;
- #error_log logs/error.log info;
- #error_log "pipe:rollback logs/error_log interval=1d baknum=7 maxsize=2G";
- # 将pid写入文件中
- pid logs/nginx.pid;
- events {
- # 每个worker进程支持的最大连接数
- worker_connections 1024;
- }
- # 配置文件的核心区域
- http {
- include mime.types;
- default_type application/octet-stream;
- # 打开nginx的访问日志功能
- 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;
- #access_log "pipe:rollback logs/access_log interval=1d baknum=7 maxsize=2G" main;
- sendfile on;
- #tcp_nopush on;
- #keepalive_timeout 0;
- keepalive_timeout 65;
- # 打开此功能,能够极大的提升网站访问,以及静态资源压缩
- gzip on;
- # 虚拟主机的核心配置
- server1 {
- listen 80;
- server_name localhost;
- # nginx编码支持
- charset utf-8
- #charset koi8-r;
- #access_log logs/host.access.log main;
- #access_log "pipe:rollback logs/host.access_log interval=1d baknum=7 maxsize=2G" main;
- # nginx的域名匹配,所有的请求,都会进入到这里
- location / {
- # 定义该虚拟主机资料存放路径,可以自由修改
- root html;
- # 定义nginx首页文件名字,需要在root指定的目录下
- 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;
- }
- }
- # 可以定义第二个虚拟主机的配置
- server2 {
- listen 90;
- server_name localhost;
- # nginx编码支持
- charset utf-8
- # nginx的域名匹配,所有的请求,都会进入到这里
- location / {
- # 定义该虚拟主机资料存放路径,可以自由修改
- root html;
- # 定义nginx首页文件名字,需要在root指定的目录下
- 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;
- }
- }
- }
4.nginx多站点功能
nginx的web站点也称为nginx的虚拟主机站点,通过文件目录的不同,定义多个不同的网站
多虚拟主机的实现方式
基于域名的多虚拟主机
- 修改hosts文件,强制写入域名对应关系,比较麻烦
基于端口的虚拟主机
- 修改nginx.conf的端口配置,定义两个server与区块,如下
- # 目前这里是第一个server {} 区域块,端口是85
- server {
- # 定义该网站的端口
- listen 85;
- server_name localhost;
- charset utf-8;
- location / {
- root /python/;
- index index.html index.htm;
- }
- }
- # 目前这里是第二个server {} 区域块,端口是85
- server {
- # 定义该网站的端口
- listen 89;
- server_name localhost;
- charset utf-8;
- location / {
- root /linux/;
- index index.html index.htm;
- }
- }
基于IP的虚拟主机
通过不同的IP区分不同的虚拟主机,此类比较少见,一般业务需要多IP的常见都会在负载均衡中绑定
5.nginx日志
日志作用
- nginx的方可日志,能够记录,分析用户的请求行为
- -什么时间点,访问的最频繁,比如某网站,网站的流量,基本都在晚上,学生下了班,在线学习各种技术
- -记录用户的请求频率,以此检测是否是爬虫等恶意请求,进行封禁。
操作
- 改nginx.conf 在 http{}代码块中,打开如下注释即可
- #打开此nginx的访问日志功能,即可查看日志
- 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;
- 日志变量解释
- $remote_addr 记录客户端ip
- $remote_user 远程用户,没有就是 “-”
- $time_local 对应[14/Aug/2018:18:46:52 +0800]
- $request 对应请求信息"GET /favicon.ico HTTP/1.1"
- $status 状态码
- $body_bytes_sent 571字节 请求体的大小
- $http_referer 对应“-” 由于是直接输入浏览器就是 -
- $http_user_agent 客户端身份信息,以此可以nginx判断,用户客户端是手机浏览器,就转发移动端页面给与用户
- 如果是pc的客户端,就转发给pc页面给与用查看
6.反向代理

正向代理,代理的是客户端
反向代理,代理的是服务端
nginx反向代理的操作:
第一个server{}标签,用于反向代理的作用,修改nginx.conf如下
- # 第一个虚拟主机的配置,作用是反向代理了
- server {
- listen 80;
- server_name localhost;
- charset utf-8;
- error_page 404 /40x.html;
- # 如果你写的是proxy_pass参数,就是一个请求转发,反向代理功能
- location / {
- proxy_pass http://192.168.178.140:90;
- }
- }
第二个server{}标签,作用是返回机器上的资料,也就是一个web站点的功能
- #第二个虚拟主机,作用是web站点功能,资源服务器,提供页面的
- server {
- listen 90;
- server_name _;
- location / {
- root /s25proxy/;
- index index.html;
- }
- }
7.负载均衡
负载均衡就是将请求均衡的分给不通的web服务端
负载均衡的搭建
第一个虚拟主机server{}的作用,是反向代理,80端口
- # 用upstream关键词定义负载均衡池,写入资源服务器的地址
- # 负载均衡的算法,默认是轮询机制,一台服务器处理一次
- upstream s25real_server {
- server 192.168.178.140:90;
- server 192.168.178.140:95;
- }
- server {
- listen 80;
- server_name localhost;
- charset utf-8;
- error_page 404 /40x.html;
- location / {
- proxy_pass http://s25real_server;
- }
- }
第二个server{}标签的配置,作用是提供资源给用户看的,90端口
- #第二个虚拟主机,作用是web站点功能,资源服务器,提供页面的
- server {
- listen 90;
- server_name _;
- location / {
- root /s25lol/;
- index index.html;
- }
- }
第三个server{}标签的作用,同样是返回资源页面,查看负载均衡效果的,95端口
- #第三个server{}虚拟主机,作用是 提供资源服务器的内容的
- server {
- listen 95;
- server_name _;
- location / {
- root /s25dnf/;
- index index.html;
- }
- }
nginx负载均衡算法
- 轮询机制:默认的,每台服务器各一次
- 加权轮训机制
- upstream s25real_server {
- server 192.168.178.140:90 weight=4;
- server 192.168.178.140:95 weight=1;
- }
8.搭建文件服务器
- server {
- listen 80;
- server_name localhost;
- #charset koi8-r;
- #access_log logs/host.access.log main;
- #access_log "pipe:rollback logs/host.access_log interval=1d baknum=7 maxsize=2G" main;
- location / {
- root /opt/tng232/download;
- autoindex on; # 索引,开启目录文件列表
- autoindex_exact_size on; # 显示文件大小
- autoindex_localtime on; # 显示文件时间
- }
- }
1.nginx学习的更多相关文章
- Nginx学习回顾总结 部分:
21:46 2015/11/9Nginx学习回顾总结进程间通信,近似于socket通信的的东西:才发现这种通信并不是很难,并不是我想象的那样很多内容,新领域,入门只是几个函数的使用而已.以前猜过是这样 ...
- Nginx学习笔记4 源码分析
Nginx学习笔记(四) 源码分析 源码分析 在茫茫的源码中,看到了几个好像挺熟悉的名字(socket/UDP/shmem).那就来看看这个文件吧!从简单的开始~~~ src/os/unix/Ngx_ ...
- Nginx学习笔记~目录索引
回到占占推荐博客索引 前几天整理了<Docker的学习笔记索引>,受到了很多朋友的关注,今天把Nginx的文章也整理一下,以后将永久更新,像大叔之前的<EF文章系列>,< ...
- Nginx学习系列二Linux下Nginx实现负载均衡
关于在本地虚拟机(VMware 14)下安装Linux同时安装Nginx,请参考Nginx学习系列之搭建环境 1.启动Nginx 在Nginx安装成功的前提下,启动Nginx 已root模式登陆(权限 ...
- Nginx系列0:Nginx学习历程
Nginx学习历程 一.初识Nginx 1.Nginx适用于哪些场景 (1)静态资源服务 通过本地文件系统提供服务 (2)反向代理服务 Nginx的强大性能 缓存 负载均衡 (3)API服务 Open ...
- nginx 学习资料
nginx 学习资料 table th:first-of-type { width: 90px; } table th:nth-of-type(2) { } table th:nth-of-type( ...
- Nginx学习总结
2017年2月23日, 星期四 Nginx学习总结 Nginx是目前比较主流的HTTP反向代理服务器(其企业版提供了基于TCP层的反向代理插件),对于构建大型分布式web应用,具有举足轻重的作用.简单 ...
- nginx 学习笔记(2) nginx新手入门
这篇手册简单介绍了nginx,并提供了一些可以操作的简单的工作.前提是nginx已经被安装到你的服务器上.如果没有安装,请阅读上篇:nginx 学习笔记(1) nginx安装.这篇手册主要内容:1. ...
- Nginx学习---Nginx的详解_【all】
1.1. Nginx简介 1.什么是nginx nginx:静态的,开源的www软件,可以解析静态的小文件(低于1M ),支持高并发占用较发少的资源(3W并发,10个进程,内存150M),跨平台 te ...
- Nginx学习之从零搭建静态资源网站
前言 在某学习网站学习了nginx的安装和使用,以此文记录. 环境准备 安装在VMWare下的Centos虚拟机.由于我这是新装的虚拟机.所以很多插件都没有,这里干脆一次性安装上. wget ...
随机推荐
- TMC2209步进驱动芯片基本配置及使用
TMC2209是用于两相步进电机的超静音电机驱动器IC. TMC2209与许多传统驱动器以及TMC2208引脚兼容. TRINAMICs先进的StealthChop2斩波器可确保电机无噪音运行,实现最 ...
- PI控制器的由来
20世纪20年代初,一位名叫尼古拉斯·米诺斯基(Nicolas Minorsky)的俄裔美国工程师通过观察舵手在不同条件下如何驾驶船只,为美国海军设计了自动转向系统. 根据Wikipedia.org, ...
- 「题解报告」P3354
P3354 题解 题目传送门 一道很恶心的树形dp 但是我喜欢 题目大意: 一片海旁边有一条树状的河,入海口有一个大伐木场,每条河的分叉处都有村庄.建了伐木场的村庄可以直接处理木料,否则要往下游的伐木 ...
- 【三维地图】开发攻略 —— 详解“GeoJSON”技术和应用场景
GeoJSON ,一个用于存储地理信息的数据格式.GoeJSON对象可以表示几何.特征或特征集合,支持:点.线.面.多点.多线.多面和几何集合.在基于平面地图,三维地图中都需要用到的一种数据类型. 由 ...
- Linux常用基础命令三
一.ln 软链接 软链接也称为符号链接,类似于 windows 里的快捷方式,有自己的数据块,主要存放 了链接其他文件的路径. 在查看文件目录中,软连接是以'l'开头 创建软链接 ln -s [原文件 ...
- 十一章 Kubernetes的服务发现插件--coredns
1.前言 简单来说,服务发现就是服务(应用)之间相互定位的过程: 服务发现并非云计算时代独有的,传统的单体架构时代也会用到,以下应用场景更加需要服务发现: 服务(应用)的动态性强: 服务(应用)更新发 ...
- KingbaseES OUT 类型参数过程与函数的调用方法
对于含有 out 类型参数的过程或者函数,只能通过块方式调用,这是因为,ksql 还不支持类似 Oracle 那样通过 var 定义变量. 一.带OUT的procedure 调用 创建过程: crea ...
- Github-CLI
Github-CLI Github 的官方命令行工具 Github CLI.Mac 系统可以通过 homebrew 安装或者直接下载免安装包来使用. 命令 Github CLI 的所有命令均以gh开头 ...
- 我的Vue之旅、04 CSS媒体查询完全指南(Media Quires)
什么是SCSS Sass: Sass Basics (sass-lang.com) SCSS 是 CSS 的预处理器,它比常规 CSS 更强大. 可以嵌套选择器,更好维护.管理代码. 可以将各种值存储 ...
- MySQL8.0报错:Access denied; you need (at least one of) the SYSTEM_USER privilege(s) for this operation
MySQL8.0.16版本中新增了一个system_user帐户类型,当新增用户并赋予权限时 mysql> create user 'proxysql'@'192.168.20.%' ident ...