文章目录
Nginx基本配置讲解
Nginx (engine x) 是一个高性能的HTTP和反向代理web服务器,同时也提供了IMAP/POP3/SMTP服务。
官方测试nginx能够支撑5万并发链接,并且cpu、内存等资源消耗却非常低,运行非常稳定。
Nginx解决的问题
-
高并发
-
负载均衡
-
高可用
-
虚拟主机
-
伪静态
-
动静分离
正向代理和反向代理的区别
-
代理对象不同,正向代理代理的是客户端,反向代理代理的时候服务器。
-
架设主体不同,正向代理一般是客户端架设的,比如在自己的机器上装一个代理软件,反向代理一般是服务器架设的,通常是在机器集群中部署个反向代理服务器。
-
保护对象不同,正向代理保护对象是客户端,反向代理保护对象是原始资源服务器。
-
作用目的不同,正向代理主要目的是解决访问限制问题,而反向代理一方面是作为负载均衡,再就是起到安全防护的作用。
正向代理
客户端通过代理访问真实的服务器地址。
反向代理客户端访问代理服务器地址,代理服务器将请求转发到真实的服务器地址。
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
- 在阿里云或腾讯云等平台购买免费(或者付费的SSL证书),然后绑定到个人域名上。
- 这里以阿里云为例,第一步完成后,在阿里云搜索在Nginx(或Tengine)服务器上安装证书,根据文档提示完成证书在nginx上的配置(该文档步骤非常详细,这里不赘述)。
注意:如果在重启Nginx服务时收到报错:the “ssl” parameter requires ngx_http_ssl_module…
解决方法:重新编译增加ssl模块。
- cd到nginx的源码目录,然后执行 ./configure --with-http_stub_status_module --with-http_ssl_module
- 执行make编译,执行make完成后不要执行install
- 进入objs目录下,拷贝nginx这个执行文件到安装目录下的/sbin目录,替换掉/sbin下的nginx(可以先将之前的nginx执行文件备份一下)。
- 启动nginx,访问https。
- 注意:记得开放443端口以及域名记得备案哦。