nginx学习使用

Posted To Be Yourself

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了nginx学习使用相关的知识,希望对你有一定的参考价值。

介绍

Nginx是世界上第二大Web服务器,其他Web服务器有:Apache、Lighttpd、Tomcat、Jetty、IIS。

区别:

  • Tomcat、Jetty面向Java语言,先天就是重量级的Web服务器,他们的性能与nginx没有可比性;
  • IIS只能在Windows操作系统上运行;
  • Apache发展时期最长,是毫无争议的第一大Web服务器,然而它被设计为一个重量级的、不支持高并发的Web服务器,这决定了Apache不可能成为高性能Web服务器。
  • Nginx是俄罗斯的Igor Sysoev用C语言开发的 跨平台的支持高并发的Web服务器,以性能为王。

特点:

  • 更快。一方面单次请求将会得到更快的响应;另一方面 在数以万计的并发请求时,Nginx比其他Web服务器更快的响应请求。
  • 高扩展性。它完全由不同功能、不同层次、不同类别且耦合度极低的模块组成。
  • 高可靠性。nginx的高可靠性来自于其核心框架代码的优秀设计、模块设计的简单性。
  • 低内存消耗。1万个非活跃的Http Keep-Alive连接在Nginx中仅消耗2.5MB的内存,这是nginx支持高并发连接的基础。
  • 单机支持10万以上的并发连接。
  • 热部署。7X24小时不间断的服务的前提下,升级nginx的可执行文件。
  • 最自由的BSD许可协议。用户不仅免费使用nginx,而且可以参与修改源代码

 选择Nginx的核心理由是:它能够在支持高并发请求的同时 保持高效的服务。Nginx先天的事件驱动型设计、全异步的网络I/O处理机制、极少的进程间切换以及许多优化设计,使得它天生善于处理高并发压力下的互联网请求。

 

安装和常用命令 

以Linux(Ubuntu)为例,Nginx的软件包在Ubuntu默认软件仓库中可用。 安装非常简单,只需键入以下命令:

sudo apt update
sudo apt install nginx

安装后,配置文件默认位置   /etc/nginx/nginx.conf

安装完成后,请检查Nginx服务的状态和版本:sudo systemctl status nginx

查看版本:sudo nginx -v

  • 使用systemctl管理Nginx服务

您可以像任何其他systemd单位一样管理Nginx服务。 要停止Nginx服务,请运行:sudo systemctl stop nginx

要再次启动,请键入:sudo systemctl start nginx

重新启动Nginx服务:sudo systemctl restart nginx

在进行一些配置更改后重新加载Nginx服务:sudo systemctl reload nginx

  • 也可以使用service管理Nginx服务

停止Nginx服务,请运行:sudo service nginx stop

Nginx的配置

 Nginx有很多的模块,这些模块可以帮助我们实现Web服务器上很多的功能。使用这些模块时,仅仅需要增加、修改一些配置项即可。

运行中的Nginx进程间的关系:部署Nginx时 都是使用一个master进程来管理多个worker进程,一般情况下,worker进程的数量与服务器上的CPU核心数相等。(这样进程间切换的代价是最小的)

配置的通用语法:

  • 块配置项:{}括起来的
  • 配置项的语法格式:配置项名 配置项值1 配置项值2 ;   【空格作为分隔符,多个值之间也是空格,最后以分号结尾】
  • 配置项的注释:# 开头

Nginx服务的基本配置

基本配置是其他模块执行时都依赖的配置项。分为以下4类:

1、用于调试、定位问题的配置项;

(1) 是否以守护进程方式运行Nginx

daemon on|off  默认是on,且配置文件中不用写

(2)是否以master/worker方式工作

master_process on|off  默认是on

(3)error日志的设置

error_log  logs/error.log  error   【分别是 路径和级别,当设置为error级别时,debug和info的日志则不会输出到文件中】

2、正常运行的必备配置项;

(1)定义环境变量

env VAR= Value;

(2)嵌入其他配置文件

include /path/file;   可以将其他配置文件嵌入到当前的nginx.conf文件中,可以是绝对路径,也可以相对路径

(3)pid文件的路径

pid path/file;  保存master进程ID的pid文件存放路径。

默认:pid logs/nginx.pid;

(4)Nginx worker进程运行的用户及用户组

user ;username [groupname];    

user用于设置master进程启动后,fork出的worker进程运行在哪个用户和用户组下。

默认:user nobody nobody;

3、优化性能的配置项;

(1)worker进程个数

worker_processes number;

默认 number=1 ,一般cpu核心数为几则设置为多少

(2)绑定worker进程到指定的CPU内核 。eg:

worker_processes 4;

worker_cup_affinity 1000 0100 0010 0001;

4、事件类配置项;

(1)每个worker的最大连接数

worker_connections number;

用HTTP核心模块配置一个静态Web服务器

静态Web服务器的主要功能有ngx_http_core_module模块(HTTP框架的主要成员)实现。Nginx为配置一个完整的静态Web服务器提供了非常多的功能,把这些配置项分为以下8类:

(1)虚拟主机与请求的分发

http块中的每个Server就是一个虚拟主机,它只处理与之对应的主机域名请求。所以以下配置均是在Server块中。

1、监听端口

默认:listen 80;

listen参数决定Nginx服务如何监听端口。在listen后可以只加IP地址、端口或者主机名,非常灵活。eg:

listen 127.0.0.1:8000;

listen 8000;

listen localhost:8000;

设置默认虚拟主机,listen后加default或者default_server,将所在的server块作为整个Web服务的默认server块。

2、主机名称

默认:server_name "";

可以设置多个主机名称,eg:server_name localhost www.testweb.com download.testweb.com;

在处理HTTP请求时,nginx会取出header头中的Host,与每个server中的server_name进行匹配,

3、location

语法:location [=|~|~*|^~|@] /uri/ {...}

location会尝试根据用户请求中的URI来匹配上面的/uri表达式,如果可以匹配,就选择location{} 块中的配置来处理用户请求。

location / {

# 这个配置可以匹配所有请求

}

 

(2)文件路径的定义

1、以root方式设置资源路径

root path;

默认:root html;

配置块:http、server、location、if

eg:location /download {

root /opt/web/html;}

如果有一个请求的uri是/download/index/test.html,那么Web服务器将会返回服务器上/opt/web/html/download/index/test.html 文件的内容。

2、访问首页

index file...;

默认:index index.html;

eg:

location /{

root  path;

index /index.html /html/index.php;}   请求的文件是path/index.html ,若不存在,则访问配置的第二个文件。

3、根据HTTP返回码重定向页面

例如:error_page 404 /404.html

(3)内存及磁盘资源的分配

 

用HTTP proxy module配置一个反向代理服务器

 反向代理(reverse proxy)方式是指 用代理服务器来接受Internet上的连接请求,然后将请求转发给内部网络中的上游服务器来处理。此时代理服务器对外的表现就是一个Web服务器。

Nginx通常可以配置为静态的Web服务器,也可以配置为反向代理服务器。

 

负载均衡的基本配置

作为代理服务器,一般都需要向上游服务器的集群转发请求。这里的负载均衡是指:选择一种策略,尽量把请求平均地分到每一台上游服务器上。

(1)upstream块

语法:upstream name {...}

配置块:http 即upstream是位于HTTP块中的

upstream块定义了一个上游服务器的集群,便于反向代理中的proxy_pass使用。

eg:upstream backend{

server  backend1.example.com;

server  backend2.example.com;

}

(2)server

配置块:upstream块

语法:server name [parameters];

name可以是域名、ip地址端口;

参数,可以是 weight=number,设置这台上游服务器转发的权重,默认为1;

....

 

反向代理的基本配置

(1)proxy_pass

语法:proxy_pass URL;

配置块:location,if

将当前请求反向代理到URL参数指定的服务器上,可以是主机名 或者IP地址加端口,还可以是负载均衡的upstream块名,eg:proxy_pass http://backend;

默认情况下,反向代理是不会转发请求中的Host头部的。如果需要转发,那么必须加上配置:

proxy_set_header Host $host; 

 

 

kill -9杀掉nginx主进程、reload失败解决办法 

kill -9 5767 14801

 

以上是关于nginx学习使用的主要内容,如果未能解决你的问题,请参考以下文章

nginx.conf 忽略了 nginx-ingress 配置映射片段

将 nginx rtmp 片段发送到 WebRTC

IOS开发-OC学习-常用功能代码片段整理

java SpringRetry学习的代码片段

python 机器学习有用的代码片段

text 有用的nginx命令和片段