概述
nginx入门
文章目录
- nginx入门
- nginx介绍
- nginx简介
- 基本概念
- 反向代理
- 负载均衡
- 动静分离
- nginx的安装和常用指令
- nginx安装
- nginx的常用命令
- nginx的配置简单介绍
- 全局块
- events块
- http块
- nginx的配置举例
- 反向代理配置
- 负载均衡配置
- 动静分离配置
- nginx出现的问题解决
- 1. 请求页面成功,但是css,js无法找到
- 2. 访问页面出现 403 forbidden
nginx介绍
nginx简介
废话不多说,直接请度娘:nginx百度百科
nginx可以作为静态页面的web服务器,同时还支持CGI协议的动态语言,比如perl、php等.但是不支持java. Java程序只能通过与tomcat配合完成.nginx专为性能优化而开发,性能是其最重要的考量,实现上非常注重效率,能经受高负载的考验,有报告表明能支持高达50.000个并发连接数
基本概念
反向代理
反向代理,其实客户端对代理是无感知的,因为客户端不需要任何配置就可以访问,我们只需要将请求发送到反向代理服务器,由反向代理服务器去选择目标服务器获取数据后,在返回给客户端,此时反向代理服务器和目标服务器对外就是一一个服务器,暴露的是代理服务器地址,隐藏了真实服务器IP 地址
负载均衡
对于庞大的请求数量,我们增加服务器数量,然后将请求转发到多个服务器上,将负载分发到不同的服务器,说的通俗一点就是分流
负载均衡有以下集中策略:
- 轮询(默认)
每个请求按照顺序逐一分配到不同的后端服务器,如果某个服务器宕机,可以自动删除该服务器节点
- weight
权重,默认为1,可以自定义权重,权重越高分配的请求越多
- ip_hash
每个请求按照访问ip的hash值分配,这样每个访客就会访问一个固定的服务器,可以解决session无法共享的问题
- fair
按照每个服务器的响应时间来分配,响应时间越短的服务器,分配的优先级越高
动静分离
nginx动静分离简单来说就是把动态跟静态请求分开,不能理解成只是单纯的把动态页面和静态页面物理分离.严格意义上说应该是动态请求跟静态请求分开,可以理解成使用nginx处理静态页面,Tomcat 处理动态页面.动静分离从目前实现角度来讲大致分为两种
nginx的安装和常用指令
nginx可以安装在Windows或者Linux系统中,因为现在的服务器都是用的Linux系统,而且nginx只有在Linux中才能体现出其优点,所以我们只介绍Linux下的nginx安装,如果感兴趣可以自行搜索Windows下的nginx部署
nginx安装
注意
如果嫌安装以下步骤麻烦,可以直接使用yum
命令安装,会自动安装所有的依赖和nginx
- 将nginx安装包上传到服务器中
- 安装nginx需要的依赖(pcre,openssl,zlib)
使用yum安装即可
yum -y install zlib zlib-devel gcc-c++ libtool openssl openssl-devel
查看pcre是否安装成功(查看pcre版本)
pcre-config --version
查看openssl是否安装成功
openssl
如果进入了openssl命令行状态,说明安装成功
- 安装nginx
解压nginx的安装包
tar -zxv -f nginx-1.16.1.tar.gz
然后进入解压完成之后的安装包目录,执行
./configure
然后执行安装命令
make && make install
- 查看是否安装成功
安装完成之后,首先查看/usr/local/
目录下是否有nginx的目录
如果有,进入到nginx的sbin目录,然后执行启动脚本
cd nginx/sbin/
./nginx
然后查看nginx是否启动成功
ps -ef | grep nginx
如果有2个nginx的进程,说明启动成功
然后打开浏览器,访问主机的80端口(nginx默认的监听端口是80),如果出现
Welcome to nginx!
说明访问成功
如果访问失败,记得查看服务器防火墙是否关闭!
nginx的常用命令
注意
使用nginx命令需要在/usr/local/nginx/sbin/
目录下执行,也可以配置全局变量从而在任何位置都可以执行
- 查看nginx版本号
./nginx -v
- 启动nginx
./nginx
- 关闭nginx
./nginx -s stop
- 查新加载nginx
如果修改了配置文件,但不想重启nginx,这个时候可以使用重新加载命令
./nginx -s reload
nginx的配置简单介绍
注意
nginx的配置文件都在/usr/local/ngnix/conf/
目录下的nginx.conf
nginx的配置文件由全局块,events块,http块但部分组成
全局块
从配置文件开始到events 块之间的内容,主要会设置些影响 nginx服务器整体运行的配置指令,主要包括配置运行nginx服务器的用户(组)、允许生成的worker process数,进程PID存放路径、日志存放路径和类型以及配置文件的引入等
- worker_processes
这是nginx服务器并发处理服务的关键配置, worker processes值越大,可以支持的歼发处理星也越多,但是会受到硬件、软件等设备的制约.
events块
events块涉及的指令主要影响nginx服务器与用户的网络连接,常用的设置包括是否开启对多work process下的网络连接进行序列化,是否允许同时接收多个网络连接,选取哪种事件驱动模型来处理连接请求,每个word process可以同时支持的最大连接数等
- work_connections
表示每个work process支持的最大连接数,默认为1024.
http块
这一部分是nginx中配置最频繁的部分,代理,缓存和日志定义等绝大多数功能和第三方模块的配置都在这里
http配置的包括文件的引入,MIME-TYPE定义,日志自定义,连接超时的时间,单链接请求数上限等,在http块里,还包含server块
###### server块
这一部分和虚拟主机有关系,每个http块可以包含多个server块,每个server快就相当于一台虚拟主机,server块中还有location块,每个server块中也可以有多个location块
- listen
表示当前虚拟主机监听的端口
- server_name
表示当前虚拟主机的主机名(或者IP地址),也可以使用正则表达式
- location [选项] <虚拟地址>
<虚拟地址>表示的是访问该虚拟主机的地址(uri),默认是/
语法
location [ = | ~ | ~* | ^~ | @ ] /uri/ {
#配置内容
}
选项
选项 | 说明 |
---|---|
location /uri | 不带任何修饰符,表示前缀匹配 |
location = /uri | 精确前缀匹配,只有完全匹配才能生效 |
location ^~ /uri | 普通字符串匹配上以后不再进行正则匹配 |
location ~ pattern | 区分大小写的正则匹配 |
location ~* pattern | 不区分大小写的正则匹配 |
nginx的配置举例
反向代理配置
说明 在本示例中,我们使用tomcat服务器(默认端口8080),我们要实现访问服务器的 80端口,通过nginx转发到tomcat的 8080端口
- 安装好tomcat后,启动tomcat
<tomcat安装目录>/bin/start.sh
启动之后可以使用浏览器访问虚拟机的8080端口,看是否访问tomcat成功,如果不成功,检查防火墙是否关闭
- 在配置文件中的http块中添加以下内容,说白了就是再添加一个虚拟主机,直接复制粘贴一个server块,然后修改其内容就好
server {
listen 80;
server_name 192.168.8.128;
location / {
root html;
proxy_pass http://127.0.0.1:8080/;
index index.html index.htm;
}
#下面这一部分是错误页面,也可以不配置
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
注意
1. proxy_pass
的URL地址后面,如果不加“/”,就把请求的path添加到URL后面,例如:
#注意下面的path(/abc)
location /abc {
#这里最后面没有"/"
proxy_pass http://127.0.0.1:8080;
}
这样实际请求的是 http://127.0.0.1:8080/abc
2. proxy_pass
的URL地址后面,如果加上“/”,就会先把path去掉,再加上URL
#注意下面的path(/abc)
location /abc {
#这里最后面加上了"/"
proxy_pass http://127.0.0.1:8080/;
}
这样实际请求的路径是 http://127.0.0.1:8080
负载均衡配置
- 轮询
- 准备2台以上的tomca服务器,我这里用的是3个,tomcat服务器的搭建这里就不详细说明了,如果不会可以先去学一下
- 在nginx配置文件中http中添加如下内容
#这个块表示添加一个负载均衡
upstream <自定义一个负载均衡名称>{
server <第1个服务器的ip:端口号>;
server <第2个服务器的ip:端口号>;
server <第3个服务器的ip:端口号>;
}
- 然后添加一个server
server {
listen <监听端口号>;
server_name <服务器地址>;
location / {
proxy_pass http://<刚刚定义的负载均衡名称>;
}
}
为了直观一点,举个示例:
upstream tomcatTest{
server 192.168.8.101:8080;
server 192.168.8.102:8080;
server 192.168.8.103:8080;
}
#配置服务器
server {
listen 82;
server_name 192.168.8.101;
location / {
proxy_pass http://tomcatTest;
}
}
- weight 权重
在upstream
块中的每个服务器节点后面添加上weight值就好,例如:
upstream tomcatTest{
server 192.168.8.101:8080 weight=1;
server 192.168.8.102:8080 weight=2;
server 192.168.8.103:8080 weight=3;
}
- ip_hash
直接在upstram
块中添加ip_hash
即可:
upstream tomcatTest{
ip_hash;
server 192.168.8.101:8080;
server 192.168.8.102:8080;
server 192.168.8.103:8080;
}
- fair
直接在upstram
块中添加fair
即可:
upstream tomcatTest{
fair;
server 192.168.8.101:8080;
server 192.168.8.102:8080;
server 192.168.8.103:8080;
}
动静分离配置
注意
如果想要使用nginx设置其他服务器作为静态服务器,需要比较繁琐的配置,这里我们只介绍使用本机作为静态服务器
配置如下:
- 首先在本机创建一个存储静态资源的文件夹,举例用
/data/static/
目录,在static/目录下创建一个test.html文件 - 然后配置静态服务器:
server {
listen 83;
server_name localhost;
location /static/ {
root /data/;
}
}
- 配置好之后重启nginx,然后在浏览器访问
<nginx主机地址>:83/static/a.html
补充
通过location 指定不同的后缀名实现不同的请求转发。通过expires参数设置,可以指定浏览器缓存过期时间,无需去服务端验证,直接通过浏览器自身确认是否过期即可,所以不会产生额外的流量
这种方法非常适合不经常变动的资源。(如果经常更新的文件,不建议使用Expires 来缓存),比如设置为3天,那么3天之内浏览器访问这个URL,发送一个比对服务器文件请求,如果服务器该文件最后更新时间没有变化,则不会从服务器获取,直接调用浏览器的缓存即可,如果有修改,则直接从服务器重新下载
nginx出现的问题解决
1. 请求页面成功,但是css,js无法找到
说明
这是因为浏览器发出的请求仍旧是使用的nginx处理后的路径,所以就方找不到css,js或者图片的路径了,只需要再加上以下内容即可:
location ~ .*.(gif|jpg|jpeg|png|bmp|swf)$ {
proxy_pass http://<路径>;
}
location ~ .*.(js|css)?$ {
proxy_pass http://<路径>;
}
2. 访问页面出现 403 forbidden
如果在配置好路径之后,访问页面出现403 Forbidden
,然后查看nginx的日志文件,位置在/usr/local/nginx/logs/error.log
发现报的错误是Permission denied
这是由于用户和nginx工作用户不一致导致的,有两种解决方法:
- 修改配置文件,使nginx的工作用户和启动用户一致(一般是root)
user root; #不要忘了添加结尾的分号,在默认的配置里没有添加上
- 修改访问的目录权限为 777
chmod -R 777 <访问的文件目录>
nginx的博大精深之处远远不止这些,如果感兴趣大家可以继续深入学习!
最后
以上就是冷艳滑板为你收集整理的nginx入门的全部内容,希望文章能够帮你解决nginx入门所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复