nginx基本配置

简介: 一、nginx介绍 二、nginx的程序架构三、nginx模块四、nginx的功用五、nginx的安装六、nginx目录结构和命令 七、nginx配置八、nginx配置文件九、http协议相关的配置结构

nginx基本配置

 

目录:

一、nginx介绍

二、nginx的程序架构

三、nginx模块

四、nginx的功用

五、nginx的安装

六、nginx目录结构和命令

七、nginx配置

八、nginx配置文件

九、http协议相关的配置结构

 

 

一、 Nginx介绍


特性:

  • 模块化设计,较好的扩展性
  • 高可靠性
  • 支持热部署:不停机更新配置文件,升级版本,更换日志文件(假设Nginx现在为1.0版本,想升级为2.0版本,可在不停机的情况下进行更新。就是当用户新发起请求用新版本进行响应,当旧用户发请求时,如果已经有人开始连接,还可以用旧版本进行服务,当访问结束后会自动切换到新版本上,起到平滑升级的效果。)
  • 低内存消耗:10000keep-alive连接模式下的非活动连接,仅需2.5M内存(消耗内存很小,可忽略不计)
  • event-driven,aio,mmap,sendfile(易在面试中问到的原理性的东西)

 

基本功能:

  • 静态资源的web服务器(突出功能)
  • http协议反向代理服务器(突出功能)
  • pop3/imap4协议反向代理服务器
  • FastCGI(LNMP),uWSGI(python)等协议
  • 模块化(DSO),如zipSSL模块

 

注:1.Nginx一个性能优秀的作为静态资源的web服务器,换句话说他只是一个静态服务器,若要充当http服务器是充当不了的,要想运行http服务器,需要专门安装对应的软件程序,而且Nginx不支持模块方式,比如之前在apache搭建一个lamp的网站时,apache要想支持http有两种方式,一种是php模块,对应的包php是,依赖于apache的这个模块,相当于拓展apache的功能,使其成为apache的一个模块,让其能处理php程序。

 

当然,使用最多的是第二种php-fpm模式,这种模式下FastCGI以独立的进程方式运行的,它与apache是两个独立的不同软件,对应的是TCP9000端口。

 

对于Nginx来说,它也只支持FastCGI,不支持模块。换句话说以后要搭建一个Nginxphp程序,实现的名字为lnmplemp(少用,取自于engine X音译)。


在这种情况下Nginxphp程序运行是以FastCGI这种方式通讯的,即由linux nginx php-fpm mysql这四个独立的软件来支撑lemplnmp

 

2.当静态资源的web服务器想支持FastCGI(LNMP)时,实际上充当了FastCGI(LNMP),的客户端
image.png

 

前端客户端发请求到nginx服务器,由于nginx服务器处理不了于是发送给php。总体来讲nginx 充当php-fpm 的客户端,php-fpm充当mysic 的客户端。

 

此外 nginx 还可以充当http协议反向代理服务器,可搭建多个web 服务器

image.png

Nginx是一个应用层的反向代理服务器,功能强但性能弱

当然web服务器还可以充当邮件的反向代理,FastCGI(LNMP),uWSGI(python)等协议同理。

image.png

 

模块化早期是不支持动态加载的,DSO指动态加载模块,它不支持动态加载,是静态加载,即编译完是什么样就是什么样。现在已经支持动态加载了。

 

二、 nginx的程序架构


1.web服务相关的功能:

虚拟主机(server)
 
支持keep-alive 和管道连接
  访问日志(支持基于日志缓冲提高其性能)

url rewirte
路径别名
基于IP及用户的访问控制
支持速率限制及并发数限制
重新配置和在线升级而无须中断客户的工作进程

MemcachedGET接口

注:url rewirte的意思是当访问一个网站。

http://www.magedu.com/bbs为例,这种称呼已经老套了,我们不叫bbs,叫forumhttp://www.magedu.com/forum

路径别名以alias实现跳转在一个文件夹中。

总的来说,在功能上与apache类似。

2. nginx的架构

下图是nginx的架构的整个工作环境

image.png

nginx中一个master开若干个worker,但一个worker可以并发支持若干个用户的请求。每个worker可以支持很多模块,每个模块有自己特定的功能。当客户端发送请求时,由worker进程提供响应,对外进行服务。Masterworker的关系相当于指挥者与被指挥者。


作为反向代理,除了代理功能外还有储存功能。储存与磁盘或者内存中,缓存存放方式在后面进行进一步学习。

在前面的ppt展示中:

 

select/poll/epoll

  • epoll:在Linux 2.6内核中提出的selectpoll的增强版本
    支持水平触发LT和边缘触发ET,最大的特点在于边缘触发,它只告诉进程哪些fd刚刚变为就需态,并且只会通知一次
    使用事件的就绪通知方式,通过epoll_ctl注册fd,一旦该fd就绪,内核就会采用类似callback的回调机制来激活该fdepoll_wait便可以收到通知

 

  • 优点:
    没有最大并发连接的限制:能打开的FD的上限远大于1024(1G的内存能监听约10万个端口)
    效率提升:非轮询的方式,不会随着FD数目的增加而效率下降;只有活跃可用的FD才会调用callback函数,即epoll最大的优点就在于它只管理活跃的连接,而跟连接总数无关
    内存拷贝,利用mmap(Memory Mapping)加速与内核空间的消息传递;即epoll使用mmap减少复制开销

 

  • poll

本质上和select没有区别,它将用户传入的数组拷贝到内核空间,然后查询每个fd对应的设备状态
其没有最大连接数的限制,原因是它是基于链表来存储的
大量的fd的数组被整体复制于用户态和内核地址空间之间,而不管这样的复制是不是有意义
poll
特点是水平触发,如果报告了fd后,没有被处理,那么下次poll时会再次报告该fd
边缘触发:只通知一次

 

Nginx介绍
Nginx:engineX
2002年,开源,商业版
NGINX
是免费,开源,高性能的HTTP和反向代理服务器,邮件代理服务器,通用TCP/UDP代理服务器
解决C10K问题(10K Connections)
官网:http://nginx.org
二次开发版
Tengine,OpenResty(
章亦春)

 

nginx的程序架构
nginx
的程序架构:
master/worker
结构
1.
一个master进程:
负载加载和分析配置文件、管理worker进程、平滑升级

2.一个或多个worker进程
处理并响应用户请求
3.
缓存相关的进程:
cache loader
:载入缓存对象
cache manager:
管理缓存对象

 

三、nginx模块


1.nginx高度模块化,但其模块早期不支持DSO机制;1.9.11版本支持动态装载和卸载


2.
模块分类:

(1) 核心模块:core module
2)标准模块:
    HTTP 模块:ngx_http_
    HTTP Core modules
默认功能    

    HTTP Optional modules 需编译时指定
    Mail 模块ngx_mail_*
   
Stream 模块 ngx_stream-*
3)第三方模块
其中标准模块分为三个功能:http功能、邮件功能、stream功能(可以作为tcp协议的代理)

在官方网站里说的很清楚,有权威,例如:Core functionality
核心模块:

Core functionality

 

标准模块(模块类型很多):

ngx http core module
ngx http access module
ngx.http addition.module
ngx http api module
ngx htte auth basic module
ngx.http_auth jwt.module
ngx.http_auth_request_module
ngx http autoindex module
ngx_http_browser_module
ngx_htlp_charset,_module
ngx.http_dav module
ngx.http_empty_git_module
ngx http f4f module
ngx.http.fastcg_module
ngx.http.fy.module
ngx_htlp_geo module
ngx.http.geop_module
ngx.http_grpc module
ngx.http.gunzp.module

 

第三方模块

Ngx google perftools module

 

分类也很明显

 

四、nginx的功用
1.
静态的web资源服务器:html,图片,jscsstxt等静态资源

2.结合FastCGI/uWSGI/SCGI等协议反向代理动态资源请求

3.http/https协议的反向代理

4.imap4/pop3协议的反向代理

5.tcp/udp协议的请求转发(反向代理)

 

反向代理与请求转发的区别:

top结构上来说都是一样的,区别在于lvs只是接收请求转发,但不进行解决,而nginx会进行解决。表面看一样,但实现方式却不同。

image.png 

 

五、nginx的安装


1.官方:
 http://nginx.org/packages/centos/7/x86 64/RPMS


2.Fedora-EPEL:
 https://mirrors.aliyun.com/epel/7/x86 64/


3.
编译安装:

  • yum install pcre-devel openssl-devel zlib-deve
  • useradd -r nginx
  • ./configure--prefix=/usr/local/nginx—conf--

error-log-path=/var/log/nginx/error.log--http-log-
path=/var/log/nginx/access.log--pid--path=/var/run/nginx.pid --lock- path=/var/run/nginx.lock--user=nginx --group=nginx--with-http_ssl_module

--with-http_v2 module --with-http dav module --with-http_stub_status_module --with-threads --with-file-aio

  • make && make install

以下为稳定版

 

Pre-Built Packages for Stable version
To set up the yum repository for RHEL/CentOS, create the file named /etc/tum.repos.d/nginx.repo with the following contents:

 

[nginx]

Name=nginx repo

Baseurl=http://nginx.org/packages/OS/OSRELEASE/$basearch/
gpgcheck=0
enabled=1


Replace“os”with “rhel” or “centas”, depending on the distribution used, and “OSRELEASE”with "6” or “7”.for 6.x or 7.x versions, respectively


For Debian/Ubuntu, in order to authenticate the nginx repository signature and to eliminate warnings about missing PGP key during installation of the nginx package, it is necessary to add the key used to sign the nginx packages and repository to the apt program keyring. Please download this key from our web site, and add it to the apt program keyring with the following command:
sudo apt-key add nginx_signing.key


For Debian replace codename with Debian distribution cedename, and append the following to the end of the /etc/apt/sourcea.list file:

deb http://nginx.org/packages/debian/ codename nginx
deb-src http://nginx.org/packages/debian/ codename nginx


For Ubuntu replace codename with Ubuntu distribution codename, and append the following to the end of the /etc/apt/sources, list file;

deb http://nginx.org/packages/ubuntu/ codename nginx
deb-src http://nginx.org/packages/ubuntu/ codename nginx
For Debian/Ubun

路径中可进行适当替换

Ngink
name=nginx repo
bseur1=http://nginx.org/packages/centos/7/x86_64/

gpgcheck=0

enabled=1

此时为已读取效果

image.png

 

下面按直接用压路源进行安装,其中/etc/nginx/nginx.conf为主要配置文件,之后也是对其进行修改。接下来配置nginx

 

[root@centos7~]#

[root@centos7~]#

[root@centos7~]#which nginx
usr/sbin/nginx

[root@centos7~]#nginx=-help
nginx:invalid ootiont:”-“

[root@centos7~]#nginx_j

Nginx:inva;id option:”

[root@centos7~]#nginx-h
nainx version:nginx/1.12.2
Usage:ngink ThVVtTqI L-Ssigna1] [-c filename] [-p prefix] [-gdirectives]


Options:
-?.-h          :this help
-V             :show version and exit
-v             :show versionandconfioureoptions then exit
-T             :test confiouration and exit
-t              :test Cestcontiquration . dump it and exit

-s signal        :send signal to a master process : stop quit reopen reload

-p prefix         :set prefix path (default:/usr/share/nginx/)

-c filename      :set configuration file (default:/ect?nginx/nginx.conf)

-g directives     :set global directives out of configuration file
我们一般用[ront@centos7~]#nginx -s stop这个来启动期服务,但用过后要使用相应的进行停止

 

六、nginx目录结构和命令


Is /usr/local/nginx/
  html
是测试页,sbin是主程序
Is /usr/local/nginx/sbin/
   nginx
只有一个程序文件
ls /usr/local/nginx/html/
   50x.html index.html
测试网页
Nginx
:默认为启动nginx
   -h
查看帮助选项
   -V
查看版本和配置选项
   -t
测试nginx语法错误
   -c filename
指定配置文件

(default:/etc/nginx/nginx.conf)
   -s signal
发送信号给master进程,

signal : stop, quit, reopen,reload
   
示例:nginx -s stop 停止nginx
   nginx -s reload
加载配置文件
   -g directives
在命令行中指明全局指令

 

七、nginx配置


1.
配置文件的组成部分
主配置文件:nginx.conf
子配置文件 include conf.d/t.conf
fastcgi
uwsgiscgi等协议相关的配置文件mime.types:支持的mime类型
主配置文件的配置指令:
directive value [value2...];


注意:
(1)
指令必须以分号结尾
(2)
支持使用配置变量
内建变量:由Nginx模块引入,可直接引用自定义变量:由用户使用set命令定义
set variable_name value;

内置模块很多,可以参考官网,之后具体讲述


2.Main-全局配置段常见的配置指令分类

user nginx;
Worker processes auto:
error -log/var/log/nginx/ercor.log;
pid /run/nginx.pid

#Load dynamic modules.See/usr/share/nginx/README.dynanic

Events  {
worker -connections 1024

{

这是一个全局式的设置,它影响的是所有服务,http服务、邮件服务、转化代理服务……

 正常运行必备的配置

优化性能相关的配置
用于调试及定位问题相关的配置

事件驱动相关的配置

帮助文档
http://nginx.org/en/docs/

 

正常运行必备的配置:

帮助文档:http://nginx.org/en/docs/ngx_core_module.html


1. user
Syntax: user user [group];

Default: user nobody nobody;
Context: main
指定

worker进程的运行身份,如组不指定,默认和用户名同名

 

2pid /PATH/TO/PID FILE
指定存储nginx主进程PID的文件路径

 

3.include file I mask

 指明包含进来的

其它配置文件片断


4.load_module file
模块加载配置文件:/usr/share/nginx/modules/*.conf

指明要装载的动态模块路径:/usr/lib64/nginx/modules

 

 

八、nginx配置文件


主配置文件结构:四部

  • main block(主块):主配置段,即全局配置段,对http,mail都有效
      event {


}
事件驱动相关的配置

  • http{


}  http/https
协议相关配置段

  • mail {


}     mail
协议相关配置段

  • stream {


}    stream
服务器相关配置段

官方目前提供的只有main blockHTTP这两大块,其余需要自己手动填写。

 

九、http协议相关的配置结构


http {


…各server的公共配置
server {
每个server用于定义一个虚拟主机

}

server {

 

servername 虚拟生机名
root  
主目录
alias  
路径别名
location [OPERATOR] URL {  
指定URLB的特性


if CONDITION I

                          }

                }

     }

}

相关文章
|
9天前
|
缓存 前端开发 JavaScript
终极 Nginx 配置指南(全网最详细)
本文详细介绍了Nginx配置文件`nginx.conf`的基本结构及其优化方法。首先通过删除注释简化了原始配置,使其更易理解。接着,文章将`nginx.conf`分为全局块、events块和http块三部分进行详细解析,帮助读者更好地掌握其功能与配置。此外,还介绍了如何通过简单修改实现网站上线,并提供了Nginx的优化技巧,包括解决前端History模式下的404问题、配置反向代理、开启gzip压缩、设置维护页面、在同一IP上部署多个网站以及实现动静分离等。最后,附上了Nginx的基础命令,如安装、启动、重启和关闭等操作,方便读者实践应用。
195 82
终极 Nginx 配置指南(全网最详细)
|
1天前
|
应用服务中间件 nginx Docker
docker应用部署---nginx部署的配置
这篇文章介绍了如何使用Docker部署Nginx服务器,包括搜索和拉取Nginx镜像、创建容器并设置端口映射和目录映射,以及如何创建一个测试页面并使用外部机器访问Nginx服务器。
|
1月前
|
应用服务中间件 nginx Docker
本地通过域名访问虚拟机上nginx的服务、搭建域名访问环境一(反向代理配置)
这篇文章介绍了如何通过域名在本地访问虚拟机上的nginx服务,包括创建nginx容器、修改配置文件、修改本地host文件以及进行访问测试的详细步骤。文章提供了具体的Docker命令来创建并配置nginx容器,展示了配置文件的修改示例,说明了如何在本地系统的hosts文件中添加虚拟机IP和自定义域名,以及如何通过浏览器进行测试访问。
本地通过域名访问虚拟机上nginx的服务、搭建域名访问环境一(反向代理配置)
|
21天前
|
应用服务中间件 nginx
一文搞定Nginx配置RTMP!
一文搞定Nginx配置RTMP!
56 3
|
22天前
|
Ubuntu 应用服务中间件 数据库
Nginx配置:阻止非国内IP地址访问的设置方法
此外,出于用户隐私和法律合规性的考虑,应慎重考虑阻止特定国家或地区IP地址的决策。在某些情况下,这可能被视为歧视性或违反当地法律。
45 2
|
1天前
|
应用服务中间件 nginx 索引
7-15|Nginx配置
7-15|Nginx配置
|
1月前
|
Ubuntu 应用服务中间件 Linux
在Linux中,如何配置Web服务器(如Apache或Nginx)?
在Linux中,如何配置Web服务器(如Apache或Nginx)?
|
1月前
|
缓存 负载均衡 应用服务中间件
【揭秘】nginx代理配置全攻略:从零到精通,一文带你玩转高效网络代理的秘密武器!
【8月更文挑战第22天】nginx是一款高性能的HTTP与反向代理服务器,支持代理服务、负载均衡及缓存等功能,有助于提升网站响应速度和安全性。首先需确保已安装nginx,可通过包管理器进行安装。安装后启动并确认nginx运行状态。接着编辑配置文件(通常位于`/etc/nginx/nginx.conf`),设置代理转发规则,例如指定目标服务器地址和请求头信息。配置完成后测试有效性并重新加载nginx以应用更改。可以通过部署简易HTTP服务器验证代理功能是否正常工作。此外,还可以通过扩展配置文件实现更复杂的代理需求,如基于路径的代理和SSL加密等。
279 2
|
1月前
|
Web App开发 应用服务中间件 网络安全
如何在 Apache 和 Nginx 上配置 OCSP Stapling
如何在 Apache 和 Nginx 上配置 OCSP Stapling
62 8
|
1月前
|
jenkins 应用服务中间件 持续交付
如何配置 Nginx 作为 Jenkins 的反向代理并启用 SSL 加密
如何配置 Nginx 作为 Jenkins 的反向代理并启用 SSL 加密
71 8