nginx 配置文件结构
Nginx 的配置文件是一个纯文本文件,它一般位于 Nginx 安装目录的 conf 目录下,整个配置文件是以 block 的形式组织的。每个 block 一般以一个大括号“{”来表示。block 可以分为几个层次,整个配置文件中 Main 命令位于最高层,在 Main 层下面可以有 Events、HTTP 等层级,而在 HTTP 层中又包含 Server 层,即 server block,
Nginx 服务的基本配置项详解
我的本机 nginx 配置文件路径是 /usr/local/nginx/conf/ 这个目录下面,其中 nginx.conf 是主配置文件。Nginx.conf 配置文件主要分成四个部分:
main (全局设置)。
sever (主机设置)。
upstram 负载均街服务器设置。
location(URL 匹配特定位置的设置)。
说明
main 部分设置的命令将影响其他所有设置。server 部分的命令主要用于指定主机和端口;。upstream 命令主要用于负载均衡,设置一系列的后端服务器。location 部分用于匹配网页位置。这四者之间的关系式 server 继承 main,location 继承 server,upstream 既不会继承其他设置也不会被继承。
在这四个部分当中,每个部分都包含若干命令,这些命令主要包含 Nginx 的主模块命令,事件模块命令,HTTP 核心模块命令,同时每个部分还可以使用其他 HTTP 模块命令(例如 HTTP SSL 模块,HttpGzip Static 模块和 Http Addition 模块等)。
下面通过一个 Nginx 配置实例详细介绍 nginx.conf 每个命令的含义。
#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 {
use epoll;
worker_connections 1024;
}
/*
以上这块配置代码是对 nginx 全局属性的配置。user : 主模块命令,指定 Nginx 的 worker 进程运行用户以及用户组,默认由 nobody 账号运行。worker processes: 指定 Nginx 要开启的进程数。error log: 用来定义全局错设日志文件的路径和日志名称。日志输出级别有 debug,info,notice,warn,error,crit 可供选择,其中 debug 输出日志最为详细,面 crit 输出日志最少。pid: 用来指定进程 id 的存储文件位置。event:设定 nginx 的工作模式及连接数上限,其中参数 use 用来指定 nginx 的工作模式(这里是 epoll,epoll 是多路复用 IO(I/O Multiplexing) 中的一种方式),nginx 支持的工作模式有 select ,poll,kqueue,epoll,rtsig,/dev/poll。其中 select 和 poll 都是标准的工作模式,kqueue 和 epoll 是高效的工作模式,对于 linux 系统,epoll 是首选。worker_connection 是设置 nginx 每个进程最大的连接数,默认是 1024,所以 nginx 最大的连接数 max_client=worker_processes * worker_connections。进程最大连接数受到系统最大打开文件数的限制,需要设置 ulimit。*/
#下面部分是 nginx 对 http 服务器相关属性的设置
http {
include mime.types; 主模块命令,对配置文件所包含文件的设定,减少主配置文件的复杂度,相当于把部分设置放在别的地方,然后在包含进来,保持主配置文件的简洁
default_type application/octet-stream; 默认文件类型,当文件类型未定义时候就使用这类设置的。#log_format main '$remote_addr - $remote_user [$time_local]"$request" ' 指定 nginx 日志的格式
# '$status $body_bytes_sent"$http_referer" '
# '"$http_user_agent" "$http_x_forwarded_for"';
#access_log logs/access.log main;
sendfile on; 开启高效文件传输模式(zero copy 方式),避免内核缓冲区数据和用户缓冲区数据之间的拷贝。#tcp_nopush on;
#keepalive_timeout 0; 客户端连接超时时间
keepalive_timeout 65;
#gzip on; 设置是否开启 gzip 模块
#server 段是虚拟主机的配置 这里可以写在别的文件中 然后在包含进来,比如写在 /usr/local/nginx/vhost/xxx.conf 目录某文件中 然后在包含进来,可以包含多个文件 include /usr/local/nginx/vhost/*;
server {
listen 80; 虚拟主机的服务端口
server_name localhost; 用来指定 ip 或者域名,多个域名用逗号分开
#charset koi8-r;
#access_log logs/host.access.log main;
location / { 地址匹配设置,支持正则匹配,也支持条件匹配,这里是默认请求地址,用户可以 location 命令对 nginx 进行动态和静态网页过滤处理
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$ { 将以 php 为后缀的文件转发到 FastCGI 处理. 使用 FastCGI 默认配置。本地 8088 端口处理
fastcgi_pass http://127.0.0.1:8088;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
#静态文件,nginx 自己处理
location ~ ^/(images|javascript|js|css|flash|media|static)/ {
root /var/www/public/images;
expires 30d; #缓存时间 30 天,静态文件更新不多,过期时间可以设大一点。}
#配置 Nginx 状态的地址
location /NginxStatus {
stub_status on;
access_log on;
auth_basic "NginxStatus";
auth_basic_user_file conf/htpasswd;
}
#配置 nginx 负载均衡的服务器列表
upstream mysvr {
#weigth 参数表示权值,权值越高被分配到的几率越大
#本机上的 Squid 开启 3128 端口
server 192.168.199.1:88 weight=5;
server 192.168.199.1:80 weight=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;
#}
}
#端口转发 (晚点补上...)
# another virtual host using mix of IP-, name-, and port-based configuration
#
#server {
# listen 8000;
# listen somename:8080;
# server_name somename alias another.alias;
# location / {
# root html;
# index index.html index.htm;
# }
#}
# HTTPS server
#
#server {
# listen 443 ssl;
# server_name localhost;
# ssl_certificate cert.pem;
# ssl_certificate_key cert.key;
# ssl_session_cache shared:SSL:1m;
# ssl_session_timeout 5m;
# ssl_ciphers HIGH:!aNULL:!MD5;
# ssl_prefer_server_ciphers on;
# location / {
# root html;
# index index.html index.htm;
# }
#}
}
现在来实践一下
这里监听是是 80 端口,是 nginx 的默认端口,在配置文件中就添加 proxy_pass 配置,修改 server_name 后面的值为_, 保存,重启 nginx 让配置生效,浏览器打开输入服务器 ip 就会跳转到到百度首页。这就是简单的反向代理实现。
负载均衡
接着如下配置就可以是一个简单的负载均衡,默认是轮询策略,即将请求平分到每台服务器
部署 vue 项目
将打包好的 vue 的 dist 目录复制到 /home/myblog 目录下
接下来打开 nginx 的配置文件 nginx.conf, 修改配置如下
保存退出,重启 nginx, 用在浏览器用服务器 ip 或者绑定的域名就可访问,dist 文件下的 index.html 是不可以直接用浏览器打开访问的