nginx 服务器

2021-05-14 约 2569 字 阅读时长6 分钟

nginx

简介

基于C语言开发开源高性能web服务器和反向代理服务器

反向代理:接受客户端请求,转发请求到真实服务器处理,将处理结果返回客户端

image-20210807162815778

正向代理:访问外部资源时,通过代理服务器去访问

反向代理服务的时服务器,正向代理服务的是客户端

安装及基础命令

安装

bash
 1tar -zxvf nginx-1.20.1.tar.gz
 2cd nginx-1.20.1/
 3
 4# configure 报错时一般缺少一些库,根据提示安装即可
 5# ubuntu : apt-get install libpcre3 libpcre3-dev zlib1g zlib1g-dev openssl libssl-dev make
 6./configure --prefix=/usr/local/nginx --with-http_ssl_module
 7
 8# 编译,编译后的nginx文件在objs里
 9make
10
11# 安装,将编译后的文件安装到系统(创建相关目录等)
12make install
13
14# 重新编译时用得上
15make clean #清除上一次make命令生成的文件

启动

bash
1/usr/local/nginx/sbin/nginx		#普通启动
2 /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf	#通过配置文件启动
3ps -ef | grep nginx		#查看nginx进程,master和worker两个进程(主进程/工作进程)

关闭

bash
1kill -QUIT 进程id	 #优雅关闭,等待所有请求处理后关闭
2kill -TERM 进程id	 #快速关闭,直接杀死

重启

bash
1/usr/local/nginx/sbin/nginx -s reload	#杀死进程,然后重新启动

其他命令

bash
1/usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf -t	#-t参数,启动时检查配置文件
2/usr/local/nginx/sbin/nginx -V	#查看nginx版本号、编译器版本、参数配置

默认目录

  • /etc/nginx:nginx配置文件目录, 所有的nginx配置文件都在这里
  • /etc/nginx/nginx.conf:nginx的主配置文件, 可以修改它来改变nginx的全局配置.
  • /etc/nginx/sites-available:这个目录存储每一个网站的"server blocks", nginx通常不会使用这些配置, 除非它们被链接到sites-enabled目录. 一般所有的server block配置都在这个目录中设置, 然后软链接到别的目录
  • /etc/nginx/sites-enabled:这个目录存储生效的"server blocks"配置. 通常, 这个配置都是链接到sites-available目录中的配置文件.
  • /etc/nginx/snippets:这个目录主要可以包含在其它nginx配置文件中的配置片段, 重复的配置都可以重构为配置片段.
  • /var/log/nginx/access.log:每一个访问请求都会默认记录在这个文件中, 除非你做了其它设置.
  • /var/log/nginx/error.log:任何nginx的错误信息都会记录到这个文件中.

nginx配置文件

基础配置

ini
 1#worker进程运行用户
 2#user  nobody;
 3
 4#work进程默认条数,通常为CPU数量两倍或等于CPU数量
 5worker_processes  1;	
 6
 7#配置全局错误日志及类型 [debug|info|notice|warn|error|crit],默认为 error
 8#error_log  logs/error.log  error;
 9
10#配置进程PID文件,存放进程
11#pid        logs/nginx.pid;

events配置

ini
1#配置工作模式和连接数
2events {
3	#一个work进程连接上限,nginx并发连接上线为worker_processes*worker_connections,上限为65535
4    worker_connections  1024;
5}

http配置

ini
 1#配置http服务器,利用它的反向代理实现负载均衡
 2http {
 3	#配置nginx支持可以支持的多媒体类型,/conf/mine.types下可以看见支持的文件
 4    include       mime.types;
 5    
 6    #默认以流形式打开,未识别时
 7    default_type  application/octet-stream;
 8	
 9	#配置asses.log日志格式及存放路径,main是变量名
10    #log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
11    #                  '$status $body_bytes_sent "$http_referer" '
12    #                  '"$http_user_agent" "$http_x_forwarded_for"';
13	
14	#配置asses.log日志存放路径
15    #access_log  logs/access.log  main;
16
17	#开启高效文件传输模式
18    sendfile        on;
19    #防止网络阻塞
20    #tcp_nopush     on;
21	
22	#长连接超时时间
23    keepalive_timeout  65;
24	
25	#开启gzip压缩输出
26    #gzip  on;
27
28	#虚拟主机,一个http配置可以有多个server,端口号和域名不能完全一致
29    server {
30    	#端口号
31        listen       80;
32        #域名
33        server_name  localhost;
34
35		#编码格式,默认为utf-8
36        #charset koi8-r;
37		
38		#访问日志,访问这个server主机时输出日志
39        #access_log  logs/host.access.log  main;
40		
41		#默认的匹配 / 处理,当访问中有 / 时(/ 根路径),匹配到该location处理
42        location / {
43        	#本地磁盘的根路径
44            root   html;
45            #默认欢迎页
46            index  index.html index.htm;
47        }
48		
49		#配置错误页
50        #error_page  404              /404.html;
51        # redirect server error pages to the static page /50x.html
52        #配置50x错误页面
53        error_page   500 502 503 504  /50x.html;
54        
55        #精准匹配,
56        location = /50x.html {
57            root   html;
58        }
59
60        # deny access to .htaccess files, if Apache's document root
61        # concurs with nginx's one
62        #
63        #location ~ /\.ht {
64        #    deny  all;
65        #}
66    }
67	#这里可以继续配置其他server虚拟主机
68}

静态网站部署

  1. 修改配置文件,添加一个匹配,绑定根目录到自己的目录

    ini
    1location / {
    2    root   /usr/share/nginx/html;
    3    index  index.html index.htm;
    4}
    5location /myweb {
    6    root  /home/html;
    7    index index.html index.htm;
    8}
  2. root指定的时 / 路径,所以需要在/home/html下创建myweb目录

  3. 重启nginx:nginx -s reload

负载均衡

原理图统一入口nginx

image-20210807231614382

基本配置

location拦截 /myweb 请求,proxy_pass 然后转发到 upstream 中处理

ini
1upstream myweb {
2	server 192.168.115.128:8081;
3	server 192.168.115.128:8082;
4}
5server{
6	location /myweb {
7		proxy_pass http://myweb;
8    }
9}

负载均衡策略

  1. 轮询(默认)

    ini
    1#轮流发给每个服务器
    2upstream myweb {
    3	server 192.168.115.128:8081;
    4	server 192.168.115.128:8082;
    5}
  2. 权重策略

    ini
    1#按照权重,如下:3个请求,一个服务器处理2个,另个服务器处理1个
    2upstream myweb {
    3	server 192.168.115.128:8081	weight=2;
    4	server 192.168.115.128:8082	weight=1;
    5}
  3. ip hash

    ini
    1#根据ip值hash,相同的ip总是访问同一个服务器,不会丢失session,但是不建议使用,可能存在所有请求在一个服务器
    2upstream myweb {
    3	ip_hash;
    4	server 192.168.115.128:8081;
    5	server 192.168.115.128:8082;
    6}
  4. 最少连接数

    ini
    1#转发请求到处理请求最少的服务器
    2upstream myweb {
    3	least conn;
    4	server 192.168.115.128:8081;
    5	server 192.168.115.128:8082;
    6}

其他配置

  1. 备份

    ini
    1#在非backup服务器全部宕机时,请求转发到backup服务器,版本更新时可用
    2upstream myweb {
    3	server 192.168.115.128:8081;
    4	server 192.168.115.128:8082 backup;
    5}
  2. down

    ini
    1#标记down的服务器不参与负载均衡
    2upstream myweb {
    3	server 192.168.115.128:8081;
    4	server 192.168.115.128:8082 down;
    5}

静态代理

静态资源由nginx处理,通过拦截静态资源的请求,进行相应的处理

实现方式一,在 location 中配置静态资源的后缀,拦截请求后缀名

ini
1location ~.*\.(js|css|htm|html|gif|jpg|jpeg|png|bmp|swf|ioc|rar|zip|txt|f;v|mid|doc|ppt|pdf|xlx|mp3|wma)$ {
2	   root /opt/static;
3}

实现方式二,在 location 中配置静态资源所在目录实现,拦截请求路径

ini
1location ~.*/(css|js|img|images) {
2	root /opt/static;
3}

动静分离

整体架构图架构图

image-20210808121655129

实现

  • nginx负载均衡服务器

    ini
     1upstream myweb {
     2	ip_hash;
     3	server 192.168.115.128:8081;
     4	server 192.168.115.128:8082;
     5}
     6upstream static {
     7	server 192.168.115.128:81;
     8	server 192.168.115.128:82;
     9}
    10server{
    11	location /myweb {
    12		proxy_pass http://myweb;
    13    }
    14    location ~.*/(css|js|img|images) {
    15		proxy_pass http://static;
    16	}
    17}
  • 配置存放静态资源的nginx服务器

    ini
    1location ~.*/(css|js|img|images) {
    2	root /opt/static;
    3}

虚拟主机

基于端口(不重要)

ini
 1server {
 2    #端口号
 3    listen       80;
 4    #域名
 5    server_name  localhost;
 6    location / {
 7    root   html;
 8    index  index.html index.htm;
 9    }
10    error_page   500 502 503 504  /50x.html;
11    location = /50x.html {
12    root   html;
13    }
14}
15server {
16    #端口号
17    listen       81;
18    #域名
19    server_name  localhost;
20    location / {
21    root   html;
22    index  index.html index.htm;
23    }
24    error_page   500 502 503 504  /50x.html;
25    location = /50x.html {
26    root   html;
27    }
28}

基于域名(重要)

ini
 1server {
 2    #端口号
 3    listen       80;
 4    #域名
 5    server_name  www.myweb1.com;
 6    location / {
 7    root   html;
 8    index  index.html index.htm;
 9    }
10    error_page   500 502 503 504  /50x.html;
11    location = /50x.html {
12    root   html;
13    }
14}
15server {
16    #端口号
17    listen       80;
18    #域名
19    server_name  www.myweb2.com;
20    location / {
21    root   html;
22    index  index.html index.htm;
23    }
24    error_page   500 502 503 504  /50x.html;
25    location = /50x.html {
26    root   html;
27    }
28}
使用滚轮缩放
按住拖动