一.nginx

想必我们大多数人都是通过访问网站而开始接触互联网的吧。我们平时访问的网站服务 就是 Web 网络服务,一般是指允许用户通过浏览器访问到互联网中各种资源的服务。

Web 网络服务是一种被动访问的服务程序,即只有接收到互联网中其他主机发出的 请求后才会响应,最终用于提供服务程序的 Web 服务器会通过 HTTP(超文本传输协议)或 HTTPS(安全超文本传输协议)把请求的内容传送给用户。

目前能够提供 Web 网络服务的程序有 IIS、Nginx 和 Apache 等。其中,IIS(Internet Information Services,互联网信息服务)是 Windows 系统中默认的 Web 服务程序

2004 年 10 月 4 日,为俄罗斯知名门户站点而开发的 Web 服务程序 Nginx 横空出世。 Nginx 程序作为一款轻量级的网站服务软件,因其稳定性和丰富的功能而快速占领服务器市 场,但 Nginx 最被认可的还当是系统资源消耗低且并发能力强,因此得到了国内诸如新浪、 网易、腾讯等门户站的青睐。

web服务器(nginx):接收HTTP请求(例如www.pythonav.cn/xiaocang.jpg)并返回数据
web框架(django,flask):开发web应用程序,处理接收到的数据。

二.nginx 介绍

1)nginx是一个开源的,支持高性能,高并发的www服务和代理服务软件。它是一个俄罗斯人lgor sysoev开发的,作者将源代码开源出来供全球使用。

2)nginx比它大哥apache性能改进许多,nginx占用的系统资源更少,支持更高的并发连接,有更高的访问效率。

3)nginx不但是一个优秀的web服务软件,还可以作为反向代理,负载均衡,以及缓存服务使用。

4)安装更为简单,方便,灵活。

5)支持高并发,能支持几万并发连接

6)资源消耗少,在3万并发连接下开启10个nginx线程消耗的内存不到200M

7)可以做http反向代理和负载均衡

8)支持异步网络i/o事件模型epoll

第三方产品Tengine

Tengine是由淘宝网发起的Web服务器项目。它在Nginx的基础上,针对大访问量网站的需求,添加了很多高级功能和特性。Tengine的性能和稳定性已经在大型的网站如淘宝网,天猫商城等得到了很好的检验。它的最终目标是打造一个高效、稳定、安全、易用的Web平台。

三.nginx配置安装

同样,nginx也有很多的安装方式:

1)源码安装(运维偏向:规范,便于配置管理)

2)yum,rpm安装(为了效率可以选用)

nginx官网:http://nginx.org/

#安装依赖包
[root@elkstack01 ~]# yum install gcc gcc-c++ pcre-devel patch libffi-devel python-devel zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel gdbm-devel db4-devel libpcap-devel xz-devel openssl-devel -y #依赖简单介绍
一. gcc 安装
安装 nginx 需要先将官网下载的源码进行编译,编译依赖 gcc 环境,如果没有 gcc 环境,则需要安装:
yum install gcc-c++ 二. PCRE pcre-devel 安装
PCRE(Perl Compatible Regular Expressions) 是一个Perl库,包括 perl 兼容的正则表达式库。nginx 的 http 模块使用 pcre 来解析正则表达式,所以需要在 linux 上安装 pcre 库,pcre-devel 是使用 pcre 开发的一个二次开发库。nginx也需要此库。命令:
yum install -y pcre-devel 三. zlib 安装
zlib 库提供了很多种压缩和解压缩的方式, nginx 使用 zlib 对 http 包的内容进行 gzip ,所以需要在 Centos 上安装 zlib 库。
yum install -y zlib-devel 四. OpenSSL 安装
OpenSSL 是一个强大的安全套接字层密码库,囊括主要的密码算法、常用的密钥和证书封装管理功能及 SSL 协议,并提供丰富的应用程序供测试或其它目的使用。
nginx 不仅支持 http 协议,还支持 https(即在ssl协议上传输http),所以需要在 Centos 安装 OpenSSL 库。
yum install -y openssl-devel #下载nginx源码包
[root@elkstack01 ~]# wget -c https://nginx.org/download/nginx-1.10.3.tar.gz
#创建nginx用户
[root@elkstack01 ~]# useradd nginx -s /sbin/nologin -M
#解压
[root@elkstack01 ~]# tar xf nginx-1.10..tar.gz
#进入nginx安装目录
[root@elkstack01 ~]# cd nginx-1.10./
#生成编译文件,开启状态监测模块,开启ssl,开启4层代理模块
[root@elkstack01 nginx-1.10.]# ./configure --user=nginx --group=nginx --prefix=/usr/local/nginx-1.10./ --with-http_stub_status_module --with-http_ssl_module --with-stream
#编译
[root@elkstack01 nginx-1.10.]# make
#安装
[root@elkstack01 nginx-1.10.]# make install
#执行成功后我们可以看一下,/usr/local目录下是否有nginx
[root@elkstack01 nginx-1.10.]# ll /usr/local/
总用量
drwxr-xr-x. root root -- : bin
drwxr-xr-x. root root -- : etc
drwxr-xr-x. root root -- : games
drwxr-xr-x. root root -- : include
drwxr-xr-x. root root -- : lib
drwxr-xr-x. root root -- : lib64
drwxr-xr-x. root root -- : libexec
lrwxrwxrwx mysql mysql -- : mysql -> /usr/local/mysql-5.6.
drwxr-xr-x mysql mysql -- : mysql-5.6.
drwxr-xr-x root root -- : mysql-proxy
drwxr-xr-x root root -- : nginx-1.10.
drwxr-xr-x root root -- : python3.6.4
lrwxrwxrwx root root -- : redis -> /usr/local/redis-3.2.
drwxrwxr-x root root -- : redis-3.2.
drwxr-xr-x. root root -- : sbin
drwxr-xr-x. root root -- : share
drwxr-xr-x. root root -- : src
#做软链接
[root@elkstack01 nginx-1.10.]# ln -s /usr/local/nginx-1.10. /usr/local/nginx
#进入nginx程序目录
[root@elkstack01 nginx-1.10.]# cd /usr/local/nginx-1.10./
#查看nginx的目录结构
[root@elkstack01 nginx-1.10.]# ll
总用量
#存放nginx所有配置文件的目录,主要nginx.conf
drwxr-xr-x root root 4月 : conf
#存放nginx默认站点的目录,如index.html、error.html等
drwxr-xr-x root root 4月 : html
#存放nginx默认日志的目录,如error.log access.log
drwxr-xr-x root root 4月 : logs
#存放nginx程序命令的目录
drwxr-xr-x root root 4月 : sbin

nginx配置文件介绍

Nginx主配置文件/etc/nginx/nginx.conf是一个纯文本类型的文件,整个配置文件是以区块的形式组织的。一般,每个区块以一对大括号{}来表示开始与结束,每一行使用;表示结束。

#CoreModule核心模块
user nginx; #Nginx进程所使用的用户
worker_processes ; #Nginx运行的work进程数量(建议与CPU数量一致或auto)
error_log /log/nginx/error.log #Nginx错误日志存放路径
pid /var/run/nginx.pid #Nginx服务运行后产生的pid进程号 #events事件模块
events {
worker_connections #每个worker进程支持的最大连接数
use epool; #事件驱动模型, epoll默认
} #http内核模块
#公共的配置定义在http{}
http { //http层开始
...
#使用Server配置网站, 每个Server{}代表一个网站(简称虚拟主机)
'server' {
listen ; //监听端口, 默认80
server_name localhost; //提供服务的域名或主机名
access_log host.access.log //访问日志
//控制网站访问路径
'location' / {
root /usr/share/nginx/html; //存放网站代码路径
index index.html index.htm; //服务器返回的默认页面文件
}
//指定错误代码, 统一定义错误页面, 错误代码重定向到新的Locaiton
error_page /50x.html;
}
...
//第二个虚拟主机配置
'server' {
...
}
include /etc/nginx/conf.d/*.conf; //包含/etc/nginx/conf.d/目录下所有以.conf结尾的文件
} //http层结束

部署一个简单的nginx站点

#简化nginx配置文件
[root@elkstack01 conf]# grep -Ev "#|^$" /usr/local/nginx/conf/nginx.conf.default > /usr/local/nginx/conf/nginx.conf
#编辑nginx页面
[root@elkstack01 conf]# echo 'hello world' > /usr/local/nginx/html/index.html
#检测nginx语法
[root@elkstack01 conf]# /usr/local/nginx/sbin/nginx -t
nginx: the configuration file /usr/local/nginx-1.10.//conf/nginx.conf syntax is ok
nginx: configuration file /usr/local/nginx-1.10.//conf/nginx.conf test is successful
#启动nginx
[root@elkstack01 conf]# /usr/local/nginx/sbin/nginx
#检测端口
[root@elkstack01 conf]# netstat -lntup|grep
tcp 0.0.0.0: 0.0.0.0:* LISTEN /nginx
#检测进程
[root@elkstack01 conf]# ps -ef|grep nginx
root : ? :: nginx: master process /usr/local/nginx/sbin/nginx
nginx : ? :: nginx: worker proce

nginx 多个虚拟主机

如果每台linux服务器只运行了一个小网站,那么人气低,流量小的草根站长需要承担高额的服务器租赁费,也造成了硬件资源浪费。

虚拟主机就是将一台服务器分割成多个“虚拟服务器”,每个站点使用各自的硬盘空间,由于省资源,省钱,众多网站都使用虚拟主机来部署网站。

1)虚拟主机的概念就是在web服务里的一个独立的网站站点,这个站点对应独立的域名(IP),具有独立的程序和资源目录,可以独立的对外提供服务。
2)这个独立的站点配置是在nginx.conf中使用server{}代码块标签来表示一个虚拟主机。
3)Nginx支持多个server{}标签,即支持多个虚拟主机站点。

虚拟主机类型

基于域名的虚拟主机
通过不同的域名区分不同的虚拟主机,是企业应用最广的虚拟主机。

基于端口的虚拟主机
通过不同的端口来区分不同的虚拟主机,一般用作企业内部网站,不对外直接提供服务的后台,例如blog.driverzeng.com:8888

基于IP的虚拟主机
通过不同的IP区分不同的虚拟主机,此类比较少见,一般业务需要多IP的常见都会在负载均衡中绑定VIP

nginx可以自动识别用户请求的域名,根据不同的域名请求服务器传输不同的内容,只需要保证服务器上有一个可用的ip地址,配置好dns解析服务。

/etc/hosts是linux系统中本地dns解析的配置文件,同样可以达到域名访问效果

配置虚拟主机

#编辑nginx配置文件
[root@elkstack01 conf]# vim /usr/local/nginx/conf/nginx.conf
worker_processes ;
events {
worker_connections ;
}
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout ;
server {
listen ;
server_name localhost;
location / {
root html;
index index.html index.htm;
}
error_page /50x.html;
location = /50x.html {
root html;
}
}
server {
listen ;
server_name blog.charles.com;
location / {
root /code/drz;
index index.html index.htm;
}
error_page /50x.html;
location = /50x.html {
root html;
}
}
}
#创建站点目录
[root@elkstack01 conf]# mkdir -p /code/drz
#编辑blog页面
[root@elkstack01 conf]# echo '<font color="red">zls blog page</font>' > /code/drz/index.html
#检测nginx语法
[root@elkstack01 conf]# /usr/local/nginx/sbin/nginx -t
nginx: the configuration file /usr/local/nginx-1.10.//conf/nginx.conf syntax is ok
nginx: configuration file /usr/local/nginx-1.10.//conf/nginx.conf test is successful
#重新加载nginx(不间断业务)
[root@elkstack01 conf]# /usr/local/nginx/sbin/nginx -s reload
#绑定hosts(MAC)
MacBook-Pro:~ driverzeng$ sudo vim /etc/hosts
10.0.0.51 blog.charles.com
#绑定hosts(Windows)
windows+r 打开运行 输入:drivers,进入etc目录里面有一个hosts文件,在文件最后一行添加
10.0.0.51 blog.charles.com

代理多个服务器(负载均衡)

nginx配置文件

web01:
server {
listen ;
server_name www.oldboy.com;
access_log logs/www.oldboy.com_access.log main;
location / {
root html/book/ccpt_5_bbh/html;
index index.html index.htm;
}
} web02:
server {
listen ;
server_name www.oldboy.com;
access_log /var/log/nginx/www.oldboy.com_access.log main;
location / {
root /usr/local/nginx/html/book/ccpt_5_bbh/html;
index index.html index.htm; }
}

代理nginx

worker_processes  ;
events {
worker_connections ;
}
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout ; upstream www_oldboy_com {
server 10.0.0.51: weight=;
server 10.0.0.52: weight=;
}
server {
listen ;
server_name www.oldboy.com;
location / {
index index.html index.htm;
proxy_pass http://www_oldboy_com;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $remote_addr;
proxy_connect_timeout ;
proxy_send_timeout ;
proxy_read_timeout ;
proxy_buffer_size 4k;
proxy_buffers 32k;
proxy_busy_buffers_size 64k;
proxy_temp_file_write_size 64k;
}
}
}

nginx 项目部署的更多相关文章

  1. Diango + uwsgi + nginx 项目部署(可外网访问)

    自己通过nginx uwsgi 部署django项目,查询了很多资料,遇到了很多问题,最终完成了部署,趁着心情愉悦,写个随笔,为曾像我一样苦寻解决方案的小伙伴们提供些思路. 安装Nginx: #安装n ...

  2. nginx项目部署

    1.概念    1.Django项目(Web应用)    2.web服务        1.nginx        2.Apache            LNMP -> Linux Ngin ...

  3. Nginx 项目部署和配置

    nginx 作为代理服务器,需要代理多个项目的话配置如下: server { listen       80; server_name  localhost; #charset koi8-r; #ac ...

  4. SpringBoot + Vue + nginx项目部署(零基础带你部署)

    一.环境.工具 jdk1.8 maven spring-boot idea VSVode vue 百度网盘(vue+springboot+nginx源码): 链接:https://pan.baidu. ...

  5. Django+Uwsgi+Nginx项目部署文档

    一.基本环境搭建 1)查看服务器 [root@Myjumpserver ~]# cat /etc/sysconfig/selinux SELINUX=disabled SELINUXTYPE=targ ...

  6. docker简单使用+django+uwsgi+nginx项目部署

    使用docker 搭建 centos7 环境: 主机环境:windows 10专业版 一.安装docker Hub.docker.com官网下载 docker for windows 安装完成后,任务 ...

  7. linux jdk+mysql+tomcat+nginx 项目部署步骤

    1.下载linux jdk1.7.0_79.tar.gz ; 下载地址:http://www.oracle.com/technetwork/java/javase/downloads/jdk7-dow ...

  8. CentOS7.5下安装nginx --项目部署

    1.安装ngnix一些依赖包 [root@VM_39_157_centos ~]# yum -y install gcc gcc-c++ openssl-devel pcre-devel httpd- ...

  9. 在nginx上部署vue项目(history模式);

    在nginx上部署vue项目(history模式): vue-router 默认是hash模式,使用url的hash来模拟一个完整的url,当url改变的时候,页面不会重新加载.但是如果我们不想has ...

随机推荐

  1. 基于“formData批量上传的多种实现” 的多图片预览、上传的多种实现

    前言 图片上传是web项目常见的需求,我基于之前的博客的代码(请戳:formData批量上传的多种实现)里的第三种方法实现多图片的预览.上传,并且支持三种方式添加图片到上传列表:选择图片.复制粘贴图片 ...

  2. LeetCode 上最难的链表算法题,没有之一!

    题目来源于 LeetCode 第 23 号问题:合并 K 个排序链表. 该题在 LeetCode 官网上有关于链表的问题中标注为最难的一道题目:难度为 Hard ,通过率在链表 Hard 级别目前最低 ...

  3. 解决在C#(.net)按字节数截取字符串最后出现乱码的问题

    最近需要用到按字节数截取字符串.在网上找了很多方法. Encoding.Default.GetString采用的DefaultEncoding.UTF8.GetBytes采用的是utf-8编码.这样当 ...

  4. C# 曲线上的点(二) 获取距离最近的点

    如何在一条曲线上,获取到距离指定点最近的点位置? 与上一篇 C# 曲线上的点(一) 获取指定横坐标对应的纵坐标值 类似, 我们通过曲线上获取的密集点,通过俩点之间连线,获取连线上最近的点.我们能够获取 ...

  5. 基于Html5 Plus + Vue + Mui 移动App开发(三)-文件操作(读取、保存、更新数据)

      随着手机的发展,现在越来越多的人选择在手机上看书.无论是专业书籍.文学.英语还是网络小说,在手机上看新闻成了人们处理零碎时间的办法.在智能手机里安装一个资讯APP,可以随时.随地查看自己想看的资讯 ...

  6. Mac Java Idea 下面Git配置简要教程

    Mac Java Idea 配置简要教程(Sunplay) 1.找到git路径 终端输入:which git 2.在idea的设置git路径 3.测试Git的效果 测试Git成功的效果

  7. .NET Core 学习笔记2——管理nuget包

    .NET Core 基于Nuget包.它是一个.nupkg后缀的zip文件. 工具 dotnet 工具 vs2017 的程序包管理控台 这两个工具都可以用命令行来下载安装,更新,上传包(上传要先在网站 ...

  8. 浅谈SQL Server数据内部表现形式

    在上篇文章 浅谈SQL Server内部运行机制 中,与大家分享了SQL Server内部运行机制,通过上次的分享,相信大家已经能解决如下几个问题: 1.SQL Server 体系结构由哪几部分组成? ...

  9. Go语言打造以太坊智能合约测试框架(level3)

    传送门: 柏链项目学院 第三课 智能合约自动化测试 之前课程回顾 我们之前介绍了go语言调用exec处理命令行,介绍了toml配置文件的处理,以及awk处理文本文件获得ABI信息.我们的代码算是完成了 ...

  10. eclipse启动报.log错误

    解决办法: windows: D:\Program Files\eclipse\eclipse.ini 在文件末尾添加一行: --add-modules=ALL-SYSTEM