Nginx其实在项目中特别常用,用于项目的部署
配置文件
我们直接直入主题,nginx中最重要的就是nginx.conf 配置文件(目录在 nginx/conf 里面),我们基本上所需要的基本功能都是它提供的。
以下就是一个最基础的nginx.conf 配置文件
user nginx;
worker_processes auto; #worker_processes 1; 默认为1,表示开启一个业务进程
error_log /var/log/nginx/error.log notice;#制定日志路径,级别:debug|info|notice|warn|error|crit|alert|emerg
pid /var/run/nginx.pid; #指定nginx进程运行文件存放地址
events {
worker_connections 1024; # 单个业务进程可接受最大连接数,默认为512
}
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;# 使用linux的 sendfile(socket, file, len) 高效网络传输,也就是数据0拷贝。
#tcp_nopush on;
keepalive_timeout 65; #连接超时时间,默认为75s,可以在http,server,location块。
# 第一个Server区块开始,表示一个独立的虚拟主机站点
server {
keepalive_requests 120; #单连接请求上限次数。
listen 8081; #监听端口,监听地址默认就是127.0.0.1
location /login { # 请求的url过滤,正则匹配,~为区分大小写,~*为不区分大小写。
proxy_pass http://127.0.0.1:8081/; #请求转发到哪
}
location / { # 请求的url过滤,正则匹配,~为区分大小写,~*为不区分大小写。
root /usr/share/nginx/html/dist; #请求到达后的文件根目录
index index.html index.htm; #设置默认页
fastcgi_buffers 256 128k;
chunked_transfer_encoding off;
}
}
# include /etc/nginx/conf.d/*.conf;
}
根据以上文件我们先来看看整体结构
event块,主要是为了配置和网络链接相关的配置
http块 配置代理、缓存、日志记录、虚拟主机等配置
server块 配置虚拟主机的相关参数,一个http块中可以有多个server块
location块 配置请求的路由,以及各种页面的处理情况,一个server块里面可以有多个location块
locat映射讲解
格式
location [ = | ~ | * | ! | !~* | @ ] uri {…}
解释
-
= 表示精确匹配,如果找到,立即停止搜索并立即处理此请求。
-
表示执行一个正则匹配,区分大小写匹配
~* 表示执行一个正则匹配,不区分大小写匹配
!~ 区分大小写不匹配
!~* 不区分大小写不匹配
^~ 即表示只匹配普通字符(空格)。使用前缀匹配,^表示“非”,即不查询正则表达式。如果匹配成功,则不再匹配其他location。
@ 指定一个命名的location,一般只用于内部重定向请求。例如 error_page, try_files
uri 是待匹配的请求字符串,可以不包含正则表达式,也可以包含正则表达式;
示例
location = / {
# 精确匹配/,主机名后面不能带任何字符串 /
# 只匹配http://abc.com
# http://abc.com [匹配成功]
# http://abc.com/index [匹配失败]
}
location ^~ /img/ {
#以 /img/ 开头的请求,都会匹配上
#http://abc.com/img/a.jpg [成功]
#http://abc.com/img/b.mp4 [成功]
}
location ~* /Example/ {
# 则会忽略 uri 部分的大小写
#http://abc.com/test/Example/ [匹配成功]
#http://abc.com/example/ [匹配成功]
}
location /documents {
# 如果有正则表达式可以匹配,则优先匹配正则表达式。
#http://abc.com/documentsabc [匹配成功]
}
location / {
#http://abc.com/abc [匹配成功]
}
反向代理
反向代理是我们实际开发中经常会用到的东西。比如我们有一个中转机,需要通过中转机来实现两台机器的访问,那我们就可以通过反向代理的功能实现。
举例说明一下:
server {
listen 8090;
server_name localhost;
location / {
proxy_pass http://localhost:8081;
# 当请求服务器出错去寻找其他服务器
proxy_next_upstream error timeout invalid_header http_500 http_502 http_503;
}
}
这时候当我们访问了localhost:8090的时候,ngnix就将我们的请求转到 localhost:8081了