"Nginx是一款轻量级的HTTP服务器,采用事件驱动的异步非阻塞处理方式框架,这让其具备极好的IO性能,时经常使用于服务端的反向代理和负载均衡。"php
好吧我认可我也不是很能理解官方这句话,但这里咱们只需记住两个关键词,反向代理和负载均衡,这即是Nginx最大的特色,而且只须要简单的配置即可以完成。对于不是专业运维的咱们而言,Nginx的简易是十分友好的,下面咱们便来开始学习Nginx的基本配置,让咱们快速的上手使用Nginx吧。html
这里我我的推荐你们使用阿里云的ECS云服务器,由于比较方便,随时随地均可以进行操做,就不须要本身去装虚拟机什么的那么麻烦啦。
若是你还在校或者是应届毕业生的话在阿里云上面有学生优惠,认证一下就能够购买了,不到10块钱一个月,能够说是至关划算了。贴上连接:阿里云服务器学生优惠版...
下面是以CentOS7.3 64位操做系统进行配置的,关于Linux命令行这里也只用到一些基础的,遇到不懂的你们能够自行百度,这里就再也不赘述啦。前端
先安装一些必要的依赖,以便于后续的操做nginx
yum -y install gcc gcc-c++ autoconf pcre-devel make automake
yum -y install wget httpd-tools vim
复制代码
安装Nginx
在命令行终端输入:c++
vim /etc/yum.repos.d/nginx.repo
复制代码
而后将官网提供的yum源复制到文件里面去
(按键盘i表示输入状态,输入完成以后按esc而后:wq保存并退出)web
[nginx]
name=nginx repo
baseurl=http://nginx.org/packages/OS/OSRELEASE/$basearch/
gpgcheck=0
enabled=1
复制代码
复制进去后还须要改一下对应的操做系统和版本号,例如CenteOs7改为以下面试
baseurl=http://nginx.org/packages/centos/7/$basearch/
复制代码
开始安装正则表达式
yum install nginx
复制代码
安装完成后输入命令nginx -v查看版本号,出现如下提示则安装成功:chrome
阿里云安全组配置:
vim
进入nginx目录下用vim打开nginx.conf配置文件
cd /etc/nginx
vim nginx.conf
复制代码
如下是每项配置的含义
#定义Nginx运行的用户和用户组
user nginx;
#nginx进程数,建议设置为等于CPU总核心数
worker_processes 1;
#错误日志存放目录和类型
error_log /var/log/nginx/error.log warn;
#进程文件
pid /var/run/nginx.pid;
events {
worker_connections 1024; #单个进程最大链接数(最大链接数=链接数*进程数)
}
#设定http服务器
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; #nginx访问日志存放位置
sendfile on; #开启高效文件传输模式,sendfile指令指定nginx是否调用sendfile函数来输出文件,对于普通应用设为 on。
#若是用来进行下载等应用磁盘IO重负载应用,可设置为off,以平衡磁盘与网络I/O处理速度,下降系统的负载。注意:若是图片显示不正常把这个改为off。
#tcp_nopush on; #防止网络阻塞
keepalive_timeout 65; #长链接超时时间,单位是秒
#gzip on; #开启gzip压缩
include /etc/nginx/conf.d/*.conf; #包含的子配置项位置和文件,表示conf.d文件夹下.conf后缀的文件都会纳入nginx配置中
复制代码
default.conf配置项详解 进入conf.d,输入vim default.conf
查看文件
server {
listen 80; #配置监听端口
server_name localhost; #配置域名
#charset koi8-r;
#access_log /var/log/nginx/host.access.log main;
location / {
root /usr/share/nginx/html; #服务默认启动目录,表示访问根目录重定向到的文件夹
index index.html index.htm; #默认访问文件
}
#error_page 404 /404.html; # 用于配置404页面
# redirect server error pages to the static page /50x.html
#
error_page 500 502 503 504 /50x.html; #错误状态码对应的显示页面
# location后面的内容能够为正则匹配
location = /50x.html {
root /usr/share/nginx/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;
#}
}
复制代码
启动
nginx
复制代码
关闭
nginx -s quit # 进程完成当前工做后才中止
nginx -s stop # 不管进程是否在工做,当即中止
killall nginx # 杀死进程,当以上两种操做无效时可使用该命令
复制代码
从新载入配置文件
每次修改了nginx配置项时都要进行重载
nginx -s reload
复制代码
查看端口号
默认状况下nginx启动后会监听80端口来提供http服务,当出现启动失败的状况时则要查询一下端口是否被占用:
netstat -tlnp
复制代码
当页面访问出现错误时,咱们一般须要经过不一样的错误类型给用户返回不一样的错误页面提示,让用户能够返回其余页面进行操做,达到较好的用户体验,这种提早预知错误并采起相应措施的作法也是咱们必须具有的开发思想,Nginx就能够很方便的帮咱们作这一点。
打开nginx目录下conf.d文件夹下的default.conf,能够看到有如下两个配置项
error_page 500 502 503 504 /50x.html; # 表示多个错误类型指向同一页面
error_page 404 /404_error.html; # 单独为一个错误类型指定返回页面
复制代码
经过对error_page
进行配置错误类型和相应返回的html文件路径,咱们就能够友好的给用户返回相应的错误提示界面啦。
顾名思义,即对用户的访问进行控制,好比咱们一般有些页面是不但愿用户访问的,尽管用户不知道咱们的文件路径,但不能排除一些误操做或者恶意操做等,因此为了提升应用的安全性,咱们必须对用户进行一些权限设置。
location / {
allow 47.102.143.128; # 设置容许访问的用户Ip
allow 192.168.1.16;
deny all; # 设置拒绝访问的用户, all表示全部
# 值得注意的是,权限的配置是由上往下进行匹配的,这里先容许了两个Ip,后面未匹配到的则所有禁止访问
# 可是若是deny all在上面,则下面的规则将再也不进行匹配,尽管下面设置了allow也会失效
# 同理allow all也是如此
}
# 指定一些文件或者路径的访问权限
location =/public { # "="表示精确匹配
allow all;
}
location =/private {
deny all;
}
location ~\.php$ { # 使用正则表达式进行匹配, 表示禁止访问以php结尾的文件
deny all;
}
复制代码
首先咱们要了解什么是虚拟主机呢?
虚拟主机(英语:virtual hosting)或称 共享主机(shared web hosting),又称虚拟服务器,是一种在单一主机或主机群上,实现多网域服务的方法,能够运行多个网站或服务的技术。虚拟主机之间彻底独立,并可由用户自行管理,虚拟并不是指不存在,而是指空间是由实体的服务器延伸而来,其硬件系统能够是基于服务器群,或者单个服务器。
咱们能够简单把它理解为是从主服务器上面分割出来的子服务器,而且一样具有提供web服务的功能,意味着咱们能够只用一台服务器就能够部署多个网站,这样咱们就能够把咱们平时作的项目阿,demo啊,简历啊什么的只用一台服务器就能够所有部署上线,面试的时候咱们就能够尽可能多的展现咱们的技能啦。
根据Nginx监听多个端口号来区分不一样的网站。
(这里要注意检查咱们的ESC服务器安全组规则中要容许访问你配置的端口号,否则会出现端口没法访问的状况)
咱们能够在conf.d文件夹下面新建一个自配置文件,注意要要.conf结尾
server{
listen 8008;
server_name localhost;
root /usr/share/nginx/html/server8008;
index index.html;
}
server{
listen 8009;
server_name localhost;
root /usr/share/nginx/html/server8009;
index index.html;
}
复制代码
接着咱们nginx -s reload
重载下配置,并在控制输入netstat -tlnp
能够看到,800八、800九、80端口都处于运行状态。意味着咱们能够在这三个不一样端口部署你想要展现的东西啦。
这里咱们首先要注册一个域名,若是你想把你的做品展现给别人,我也强烈建议你去注册一个域名,毕竟没人会去记住一个ip地址的。
接着咱们先对域名进行解析(域名的解析要进行一系列认证和备案,否则可能会解析失败,这些到阿里云上面去操做就能够了)
server{
listen 80;
server_name xxx.xxx.com; # 这里是你解析出来的域名
location / {
root /usr/share/nginx/html/server8008;
index index.html index.html;
}
}
server{
listen 80;
server_name xxx2.xxx.com; # 这里是你解析出来的另外一个域名
location / {
root /usr/share/nginx/html/server8009;
index index.html index.html;
}
}
复制代码
修改完成后重载配置,就能够经过你配置的两个域名分别进行访问啦。
何谓反向代理,先看一张图片:
能够看到当用户访问nginx代理服务器后,nginx将请求转发到其余的服务器上面,而转发到哪一台服务器则彻底由咱们的nginx来控制
反向代理的好处:
反向代理的简单实现
server{
listen 80;
server_name xxx.xxx.com;
location / {
proxy_pass 192.168.1.16 # 代理的ip或域名
}
}
复制代码
这样配置以后,当用户访问xxx.xxx.com时,nginx便会帮咱们代理到192.168.1.16这台服务器下,这就实现了一个反向代理。
反向代理的其余配置
proxy_set_header
:在将客户端请求发送给后端服务器以前,更改来自客户端的请求头信息。proxy_connect_timeout
:配置Nginx与后端代理服务器尝试创建链接的超时时间。proxy_read_timeout
:配置Nginx向后端服务器组发出read请求后,等待相应的超时时间。proxy_send_timeout
:配置Nginx向后端服务器组发出write请求后,等待相应的超时时间。proxy_redirect
:用于修改后端服务器返回的响应头中的Location和Refresh。咱们能够访问一下淘宝或者京东的网站,而后打开经过chrome浏览器的开发者工具,当切换到移动设备刷新后,它便会给咱们呈现出移动端的页面,这一操做Nginx一样能够帮咱们作到。
经过Nginx内置变量$http_user_agent
获取请求客户端的userAgent
server{
listen 80;
server_name xxx.xxx.com;
location / {
root /usr/share/nginx/pc; # 正常状态下访问呈现PC端网站
if ($http_user_agent ~* '(Android|webOS|iPhone|iPod|BlackBerry)') { # 获取用户设备信息
root /usr/share/nginx/mobile; # 当用户为移动设备访问时呈现移动端网站
}
index index.html;
}
}
复制代码
以上就为Nginx的入门配置项啦!
这些配置对于部署咱们本身的上线项目或者我的博客都彻底不在话下,做为前端开发者的你赶忙上手把玩把玩吧。