Nginx基本配置讲解

Nginx基本配置讲解

Nginx (engine x) 是一个高性能的HTTP和反向代理web服务器,同时也提供了IMAP/POP3/SMTP服务。

官方测试nginx能够支撑5万并发链接,并且cpu、内存等资源消耗却非常低,运行非常稳定。

Nginx解决的问题

  • 高并发

  • 负载均衡

  • 高可用

  • 虚拟主机

  • 伪静态

  • 动静分离

正向代理和反向代理的区别

  1. 代理对象不同,正向代理代理的是客户端,反向代理代理的时候服务器。

  2. 架设主体不同,正向代理一般是客户端架设的,比如在自己的机器上装一个代理软件,反向代理一般是服务器架设的,通常是在机器集群中部署个反向代理服务器。

  3. 保护对象不同,正向代理保护对象是客户端,反向代理保护对象是原始资源服务器。

  4. 作用目的不同,正向代理主要目的是解决访问限制问题,而反向代理一方面是作为负载均衡,再就是起到安全防护的作用。

    正向代理

    客户端通过代理访问真实的服务器地址。
    在这里插入图片描述
    反向代理

    客户端访问代理服务器地址,代理服务器将请求转发到真实的服务器地址。
    在这里插入图片描述

Nginx的配置文件

在linux下nginx的配置文件在nginx的安装目录下的conf目录下,文件名:nginx.conf。

配置文件主要由三部分组成:

全局块,events块,http块

配置文件结构:

在这里插入图片描述

配置文件信息:

#全局块
-------------------------------------------------------
#user  nobody;
worker_processes  1;

#error_log  logs/error.log;
#error_log  logs/error.log  notice;
#error_log  logs/error.log  info;

#pid        logs/nginx.pid;
-------------------------------------------------------

    
#events块
-------------------------------------------------------
events {
    worker_connections  1024;
}
-------------------------------------------------------

       
#http块
-------------------------------------------------------
http {
    #http全局块
    ---------------------------------------------------    
    include       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  logs/access.log  main;

    sendfile        on;
    #tcp_nopush     on;

    #keepalive_timeout  0;
    keepalive_timeout  65;

    #gzip  on;
	--------------------------------------------------
    
    #server块
    --------------------------------------------------    
    server {
    #server全局块
        listen       80;
        server_name  localhost;

        #charset koi8-r;

        #access_log  logs/host.access.log  main;
    #location块
        location / {
            root   html;
            index  index.html index.htm;
        }

        #error_page  404              /404.html;

        # redirect server error pages to the static page /50x.html
        #
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }

        # proxy the PHP scripts to Apache listening on 127.0.0.1:80
        #
        #location ~ \.php$ {
        #    proxy_pass   http://127.0.0.1;
        #}

        # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
        #
        #location ~ \.php$ {
        #    root           html;
        #    fastcgi_pass   127.0.0.1:9000;
        #    fastcgi_index  index.php;
        #    fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;
        #    include        fastcgi_params;
        #}

        # deny access to .htaccess files, if Apache's document root
        # concurs with nginx's one
        #
        #location ~ /\.ht {
        #    deny  all;
        #}
    }

	#可以配置多个server块
    --------------------------------------------------    
}

全局块:

配置影响nginx全局的指令。⼀般有运⾏nginx服务器的⽤户组,nginx进程pid存放路径,⽇志存放路径,配置⽂件引⼊,worker process值等。

events块:

配置影响nginx服务器或与⽤户的⽹络连接。有每个进程的最⼤连接数,选取哪种事件驱动模型处理连接请求,是否允许同时接收多个网络连接,开启多个网络连接序列化等。

http全局块:

http 全局块配置的指令包括文件引入、 MIME-TYPE 定义、日志自定义、连接超时时间、单连接请求数上限等。

server块:

虚拟主机是一种特殊的软硬件技术,它可以将网络上的每一台计算机分成多个虚拟主机,每个虚拟主机可以独立对外提供www服务,这样就可以实现一台主机对外提供多个web服务,每个虚拟主机之间是独立的,互不影响的,每个 server 块就相当于一个虚拟主机。

通过nginx可以实现虚拟主机的配置,nginx支持三种类型的虚拟主机配置:

  • 基于ip的虚拟主机, (一块主机绑定多个ip地址)
  • 基于域名的虚拟主机(servername)
  • 基于端口的虚拟主机(listen如果不写ip端口模式)
listen       80;  #监听端口
server_name www.xxx.com xxx.com; #可以写域名和ip,可以有多个,用空格隔开
charset koi8-r; #编码集
location块:

配置请求的路由,以及各种匹配成功后的处理情况。

location / {
    root   html;  #主目录
    index  index.html index.htm;  #默认访问页面
}

反向代理

在location块中添加配置

location / {
	proxy_pass http://ip:port;   #添加要转发到的地址
    root   html;  
    index  index.html index.htm;  
}

负载均衡

需要在http块中添加如下配置,默认轮询方式进行负载

upstream test{
        server ip:port; #填具体的服务器ip和端口
        server ip:port;
}

在server块中配置location

location / {
	proxy_pass http://test;   
    root   html;  
    index  index.html index.htm;  
}

动静分离

在前后端不分离的项目中,项目的static下往往存放一下静态资源(css、js等),我们通过配置让用户直接通过nginx访问这些静态资源,而不用通过项目再去访问它们,以提高项目的并发能力。

在nginx安装目录下创建static文件夹,并将项目中static下的静态资源放到/nginx/static下,然后在配置文件中添加如下配置。

location / {
	proxy_pass http://ip:port;   #映射项目的地址
    root   html;  
    index  index.html index.htm;  
}

location /css {
    root   /usr/local/nginx/static;
}

location /images {
    root   /usr/local/nginx/static;
}

location /js {
    root   /usr/local/nginx/static;
}

location后也支持正则,所以上面的配置可以这样写:

location ~*/(css|images|js) {
    root   /usr/local/nginx/static;
}

location 前缀


没有前缀 匹配以指定模式开头的location


= 精准匹配,不是以指定模式开头


~ 正则匹配,区分大小写


~* 正则匹配,不区分大小写


^~ 非正则匹配,匹配以指定模式开头的location

location匹配顺序

  • 多个正则location直接按书写顺序匹配,成功后就不会继续往后面匹配

  • 普通(非正则)location会一直往下,直到找到匹配度最高的(最大前缀匹配)

  • 当普通location与正则location同时存在,如果正则匹配成功,则不会再执行普通匹配

  • 所有类型location存在时,“=”匹配 > “^~”匹配 > 正则匹配 > 普通(最大前缀匹配)

alias和root的区别

Nginx指定文件路径有两种方式root和alias,这两者的用法区别在于对URI的处理方法不同。

  • alias是一个目录别名的定义,root则是最上层目录的定义。
  • alias后面必须要用“/”结束,否则会找不到文件的。而root则可有可无。

举例:

#访问/css/目录里面的文件时,ningx会自动去/usr/local/nginx/css目录找文件。
location /css {
    root   /usr/local/nginx/static;
}

#访问/css/目录里面的文件时,ningx会自动去/usr/local/nginx/css目录找文件。
location /css {
    alias   /usr/local/nginx/static/;
}

rewrite重写

rewrite是实现url重写的指令,根据正则regex匹配,并跳转到replacement,flag用来控制跳转规则,取值包括break, last, redirect, permanent四种。

#关键字    正则     替代内容     标记
rewrite  regex  replacement  [flag];

#正则:
^	指定匹配字符串开始
$	指定匹配字符串结束
.	任意非空字符
+	量词,匹配1次或多次
*	匹配0次或多次
?	量词,匹配0次或1()	作为一个整体匹配
[]	匹配括号中的任意一项
    

flag标记说明:
last  #本条规则匹配完成后,继续向下匹配新的location URI规则
break  #本条规则匹配完成即终止,不再匹配后面的任何规则
redirect  #返回302临时重定向,浏览器地址会显示跳转后的URL地址
permanent  #返回301永久重定向,浏览器地址栏会显示跳转后的URL地址    

配置https

  1. 在阿里云或腾讯云等平台购买免费(或者付费的SSL证书),然后绑定到个人域名上。
  2. 这里以阿里云为例,第一步完成后,在阿里云搜索在Nginx(或Tengine)服务器上安装证书,根据文档提示完成证书在nginx上的配置(该文档步骤非常详细,这里不赘述)。

注意:如果在重启Nginx服务时收到报错:the “ssl” parameter requires ngx_http_ssl_module…

解决方法:重新编译增加ssl模块。

  1. cd到nginx的源码目录,然后执行 ./configure --with-http_stub_status_module --with-http_ssl_module
  2. 执行make编译,执行make完成后不要执行install
  3. 进入objs目录下,拷贝nginx这个执行文件到安装目录下的/sbin目录,替换掉/sbin下的nginx(可以先将之前的nginx执行文件备份一下)。
  4. 启动nginx,访问https。
  5. 注意:记得开放443端口以及域名记得备案哦。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

像鸟一样菜

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值