简而言之,正向代理隐藏的是客户端,服务于客户端,而反向代理隐藏的是服务器,服务于服务器。
Nginx提供的基本功能服务从大体上归纳为”基本HTTP服务”、“高级 HTTP服务”和”邮件服务”等三大类。
Nginx可以提供基本HTTP服务,可以作为HTTP代理服务器和反向代理服 务器,支持通过缓存加速访问,可以完成简单的负载均衡和容错,支持 包过滤功能,支持SSL等。
Nginx提供邮件代理服务也是其基本开发需求之一,
主要包含以下特 性:
/etc/nginx/
):
nginx.conf
和其他可选的配置文件。
nginx.conf
是 Nginx 服务器的主配置文件,用于控制 Nginx 的全局设置。
sites-available
和 sites-enabled
子目录,用于存放单独的网站配置文件。sites-available
包含可用的网站配置,而 sites-enabled
通常包含指向 sites-available
中实际启用的网站配置的链接。
Nginx
的配置文件。
fastcgi.conf
和 fastcgi_params
: 这两个文件与fastcgi
协议相关的参数配置,通常用于优化与fastcgi
进程(如PHP-FPM
)的交互。koi-utf
和 koi-win
: 这些是字符集映射表文件,用于在koi8-r
和其他字符集之间进行转换。mime.types
: 用于设置Nginx
中不同文件类型的MIME
类型。nginx.conf
: 这是Nginx
的主配置文件,用于定义服务器的工作模式以及各种类型的设置。scgi_params
: 用于配置与SCGI
协议相关的参数。uwsgi_params
: 用于配置与uWSGI
服务器交互的参数。win-utf
: 用于字符集转换的配置文件。/var/log/nginx/
):
access.log
) 和错误日志 (error.log
)。/usr/share/nginx/html/
或 /var/www/html/
):
/usr/sbin/nginx
):
/var/lib/nginx/
):
/var/cache/nginx/
):
ginx中的master和worker进程?
Nginx的工作方式?
如何获取进程的PID?
信号有哪些?
如何通过信号控制Nginx的启停等相关操作?
前面在提到Nginx的高性能,其实也和它的架构模式有关。Nginx默认采 用的是多进程的方式来工作的,当将Nginx启动后,我们通过 ps -ef | grep nginx
命令可以查看到如下内容:
从上图中可以看到,Nginx后台进程中包含一个master进程和多个worker 进程,master进程主要用来管理worker进程,包含接收外界的信息,并 将接收到的信号发送给各个worker进程,监控worker进程的状态,当 worker进程出现异常退出后,会自动重新启动新的worker进程。而 worker进程则是专门用来处理用户请求的,各个worker进程之间是平等 的并且相互独立,处理请求的机会也是一样的。
要想操作Nginx的master进程,就需要获取到master进程的进程 号ID。获取方式简单介绍两个,
ps -ef | grep nginx
;--pid-path=PATH
默认是/usr/local/nginx/logs/nginx.pid
,所以 可以通过查看该文件来获取nginx的master进程ID.对应的信号
通过命令调用: kill -signal PID
这几说明(飘`号)的作用: 它可以将飘号里面的执行完之后作为输出结果展示出来
kill -TERM PID / kill -TERM `cat /usr/local/nginx/logs/nginx.pid`
// `cat /usr/local/nginx/logs/nginx.pid` 获取pid, 然后展示出来
kill -INT PID / kill -INT `cat /usr/local/nginx/logs/nginx.pid`
kill -QUIT PID / kill -TERM `cat /usr/local/nginx/logs/nginx.pid`
kill -HUP PID / kill -TERM `cat /usr/local/nginx/logs/nginx.pid`
kill -USR1 PID / kill -TERM `cat /usr/local/nginx/logs/nginx.pid`
kill -USR2 PID / kill -USR2 `cat /usr/local/nginx/logs/nginx.pid`
kill -QUIT PID / kill -QUIT `cat /usr/local/nginx/logs/nginx.pid.oldbin`
发送WINCH信号给master进程,让master进程控制不让所有的work 进程在接收新的请求了,请求处理完后关闭work进程。注意master 进程不会被关闭掉
kill -WINCH PID /kill -WINCH`cat /usr/local/nginx/logs/nginx.pid`
此方式是通过Nginx安装目录下的sbin下(注意跳转到对应的目录下)的可执行文件nginx来进行 Nginx状态的控制,我们可以通过
nginx -h
来查看都有哪些参数可以 用:
**如果想对Nginx的版本进行更新,或者要应用一些新的模块,最简单的 做法就是停止当前的Nginx服务,然后开启新的Nginx服务。但是这样会 导致在一段时间内,用户是无法访问服务器。为了解决这个问题,我们 就需要用到Nginx服务器提供的平滑升级功能。这个也是Nginx的一大特 点,使用这种方式,就可以使Nginx在7_24小时不间断的提供服务了。_
Nginx的核心配置文件默认是放 在
/usr/local/nginx/conf/nginx.conf
,读取Nginx自带的Nginx配置文件,我们将其中的注释部分【学习一个技术点就是在Nginx的配置文件中可以使用 # 来注释】删除掉后,就剩下下 面内容:
user nginx;
worker_processes auto;
error_log /var/log/nginx/error.log notice;
pid /var/run/nginx.pid;
events {
worker_connections 1024;
}
http {
include /etc/nginx/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 /var/log/nginx/access.log main;
sendfile on;
#tcp_nopush on;
keepalive_timeout 65;
#gzip on;
include /etc/nginx/conf.d/*.conf;
}
Nginx的配置文件默认主要分为三大块: events块、http块、以及之外的就被成为全局块。
http块中可以配置多个server块,每个server块又可以配置多个location 块。
下面我们来简单介绍一下三大块
全局块,主要设置Nginx服务器整体运行的配置指令
这里的user就是我们使用的系统的user, 以Ubuntu为例。 使用root用户, 那么配置的用户和用户组都是root, 如果我们这里配置的用户为rayce, 那么配置文件的所属用户和用户组都是rayce,如果不使用user命令来改变对应的用户, 那么就会出现权限问题
user
指令用于指定Nginx
工作进程运行的用户以及用户组。这个指令决定了Nginx
服务器进程执行的系统权限级别。 这里我们最好不要设置为root用户。
当然如果我们随意的修改user后面的用户, 那么还需要修改location中的html页面对应的地址, 否则就会报错。
master_process:用来指定是否开启工作进程。
worker_processes:用于配置Nginx生成工作进程的数量,这个是Nginx 服务器实现并发处理服务的关键所在。
理论上来说workder process的 值越大,可以支持的并发处理量也越多,但事实上这个值的设定是需要 受到来自服务器自身的限制,建议将该值和服务器CPU的内核数保存一 致。
默认值为auto
daemon:设定Nginx是否以守护进程的方式启动。 守护式进程是linux后台执行的一种服务进程,特点是独立于控制终端, 不会随着终端关闭而停止。
pid:用来配置Nginx当前master进程的进程号ID存储的文件路径。
该属性可以通过 ./configure –pid-path=PATH 来指定
error_log:用来配置Nginx的错误日志存放路径
该属性可以通过 ./configure --error-log-path=PATH
来指定
其中日志级别的值有:
debug|info|notice|warn|error|crit|alert|emerg,翻译过来为试|信 息|通知|警告|错误|临界|警报|紧急,这块建议大家设置的时候不要设 置成info以下的等级,因为会带来大量的磁盘I/O消耗,影响Nginx的性 能。
include:用来引入其他配置文件,使Nginx的配置更加灵活(无默认值)
主要设置,Nginx服务器与用户的网络连接,这一部分对 Nginx服务器的性能影响较大
这个配置主要可以用来解决常说的”惊群”问题。大致意思是在某一个时 刻,客户端发来一个请求连接,Nginx后台是以多进程的工作模式,也 就是说有多个worker进程会被同时唤醒,但是最终只会有一个进程可以 获取到连接,如果每次唤醒的进程数目太多,就会影响Nginx的整体性能。如果将上述值设置为on(开启状态),将会对多个Nginx进程接收连接 进行序列号,一个个来唤醒接收,就防止了多个进程对连接的争抢。
如果multi_accept被禁止了,nginx一个工作进程只能同时接受一个新的 连接。否则,一个工作进程可以同时接受所有的新连接
这里的连接数不仅仅包括和前端用户建立的连接数,而是包括所有可能 的连接数。 另外,number值不能大于操作系统支持打开的最大文件句柄数量
注意:此处所选择事件处理模型是Nginx优化部分的一个重要内容, method的可选值有select/poll/epoll/kqueue等
另外这些值的选择,我们也可以在编译的时候使用 --with-select_module
、--without-select_module
、--with-poll_module
、 --without-poll_module
来设置是否需要将对应 的事件驱动模块编译到Nginx的内核。
是Nginx服务器配置中的重要部分,代理、缓存、日志记录、 第三方模块配置…
我们都知道浏览器中可以显示的内容有HTML、XML、GIF等种类繁多的 文件、媒体等资源,浏览器为了区分这些资源,就需要使用MIME Type。所以说MIME Type是网络资源的媒体类型。Nginx作为web服务 器,也需要能够识别前端请求的资源类型。
include mime.types;
default_type application/octet-stream;
如果请求内容非常简单,那么我们可以自定义响应内容
location /get_text {
#这里也可以设置成
text/plain default_type text/html;
return 200 "This is nginx's text";
}
location /get_json{
default_type application/json;
return 200 '{"name":"TOM","age":18}';
}
Nginx中日志的类型分access.log、error.log。
Nginx服务器支持对服务日志的格式、大小、输出等进行设置,需要使 用到两个指令,分别是access_log和log_format指令。
实例:
修改access.log
error.log也是类似的使用方法
对于这些配置信息, 可以在很对地方进行配置, 比如server块、location块、http块等等。 但是他到底会输出哪个呢?
日志打印遵循就近原则,他会找离他最近的配置来遵循
如果在location中有,那么就按照location块的来, 如果没有那么按照上一级server的来