NginxNginx基础操作
Posted Do_GH
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了NginxNginx基础操作相关的知识,希望对你有一定的参考价值。
文章目录
一、nginx概述
Nginx (engine x) 是一个高性能的HTTP和反向代理web服务器,同时也提供了IMAP/POP3/SMTP服务。Nginx是由伊戈尔·赛索耶夫为俄罗斯访问量第二的Rambler.ru站点(俄文:Рамблер)开发的,第一个公开版本0.1.0发布于2004年10月4日。
其将源代码以类BSD许可证的形式发布,因它的稳定性、丰富的功能集、简单的配置文件和低系统资源的消耗而闻名。2011年6月1日,nginx 1.0.4发布。
Nginx是一款轻量级的Web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,在BSD-like 协议下发行。其特点是占有内存少,并发能力强,事实上nginx的并发能力在同类型的网页服务器中表现较好,中国大陆使用nginx网站用户有:百度、京东、新浪、网易、腾讯、淘宝等。
Nginx 是一个很强大的高性能Web和反向代理服务,它具有很多非常优越的特性:
在连接高并发的情况下,Nginx是Apache服务不错的替代品:Nginx在美国是做虚拟主机生意的老板们经常选择的软件平台之一。能够支持高达 50,000 个并发连接数的响应,感谢Nginx为我们选择了 epoll and kqueue作为开发模型。
二、Nginx目录简介
/usr/sbin/nginx
Nginx的命令程序/etc/nginx/nginx.conf
Nginx配置文件/var/log/nginx
Nginx日志文件/usr/share/nginx/
Nginx默认虚拟主机目录
三、Nginx常用命令
命令 | 描述 |
---|---|
sudo nginx | 启动Nginx |
sudo nginx -s stop[quit] | 停止Nginx |
sudo nginx -s reload | 重启Nginx |
sudo nginx -c /etc/nginx/nginx.conf | 加载指定配置文件启动 |
sudo nginx -v | 查看Nginx版本号 |
四、Nginx配置文件
4.1 nginx.conf
nginx.conf为Nginx的主要配置文件,其中包含全局配置、工作模式和HTTP配置等信息。以下为该文件的默认配置
# Nginx运行时用户名称
user nginx;
# 工作进程数量,根据CPU的核心数来设置
worker_processes auto;
# 异常日志保存路径以及日志等级
error_log /var/log/nginx/error.log notice;
# PID文件位置
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;
# 是否允许调用sendfile函数来输出文件
sendfile on;
#tcp_nopush on;
# 连接超时时间(单位s)
keepalive_timeout 65;
# 是否开启gzip压缩
#gzip on;
# 引入外部配置文件,包含虚拟主机信息
include /etc/nginx/conf.d/*.conf;
4.2 default.conf
default.conf为虚拟主机的配置文件
server
# 端口号
listen 80;
# 域名(访问地址)
server_name localhost;
# 运行时日志保存位置及日志等级
#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;
# redirect server error pages to the static page /50x.html
# 访问异常页面显示
error_page 500 502 503 504 /50x.html;
# 配置错误页面位置及页面
location = /50x.html
root /usr/share/nginx/html;
如果需要配置多个项目,可以创建不同的*.conf文件,配置对应的项目
五、部署项目
Nginx的优势在于可以创建不同的虚拟主机,从而运行多个项目。例如我们在主机的主目录上创建两个不同的项目淘宝和京东商城。
此时我们在Nginx的配置目录下创建对应的配置文件:
jd.conf
server
listen 80;
server_name www.jd.test.com;
location /
root /home/dogh/software/nginx/jd;
index index.html index.htm;
taobao.conf
server
listen 80;
server_name www.taobao.test.com;
location /
root /home/dogh/software/nginx/taobao;
index index.html index.htm;
创建对应的首页并重启Nginx。由于两个程序在同一个物理机上,所以采用使用不同的域名的方式来分别进行访问,此时需要配置访问主机的hosts文件使其能够正常解析域名。
六、动静分离
使用Tomcat加载静态资源时普遍效率不高,会影响Web响应慢,并且占用系统资源。此时可以使用Nginx去加载静态资源文件,将动态请求依旧交给Tomcat去处理。
6.1 加载静态资源
编辑配置文件,指定静态资源的本地路径
# 使用通配符指定需要加载的文件类型
location ~ .*\\.(js|css|ico|png|jpg|eot|svg|ttf|woff)
root /home/dogh/software/static;
将项目中静态资源放到该目录中,重启Nginx
6.2 图片服务器应用
在实际应用中,对于项目运行过程中产生的文件资源会存放在单独的服务器中,所以需要访问的时候就需要通过HTTP协议访问文件服务器上的资源。此时Nginx就能够很好的实现这一功能。
- 通过FTP上传图片至指定目录
- 修改default.conf文件,添加文件访问的路由
# 设置访问路由 location /images # 设置图片存储位置(图片位置为root地址加路由地址) root /home/dogh/software/nginx; # 是否开启文件目录,可供用户查询所有文件 autoindex on;
- 重启Nginx服务
此时就可以通过HTTP协议直接访问主机的图片
需要注意访问权限问题,在Nginx的主配置文件中,Nginx的运行使用的是
nginx
用户,若文件并不是通过Nginx程序上传,会由于用户不同导致访问权限受限,则需要提升文件的权限或者修改Nginx的运行用户
方法一:
cd ~/software/images
# 提升文件权限,使其他用户也可访问
chmod 604 image.jpg
方法二:
修改nginx.conf中第一行use nginx
修改为use root
提升Nginx运行权限,保存后重启Nginx后即可。
若不修改文件权限或Nginx运行权限,在访问图片时就会报403无法访问的错误
七、反向代理
7.1 正向代理与反向代理
7.1.1 正向代理
正向代理是一个位于客户端和原始服务器(origin server)之间的服务器,为了从原始服务器取得内容,客户端向代理发送一个请求并指定目标(原始服务器),然后代理向原始服务器转交请求并将获得的内容返回给客户端。客户端才能使用正向代理。
正向代理的典型用途是为在防火墙内的局域网客户端提供访问Internet的途径。正向代理还可以使用缓冲特性(由mod_cache提供)减少网络使用率。
使用ProxyRequests指令即可激活正向代理。因为正向代理允许客户端通过它访问任意网站并且隐藏客户端自身,因此你必须采取安全措施以确保仅为经过授权的客户端提供服务。
7.1.2 反向代理
反向代理服务器位于用户与目标服务器之间,但是对于用户而言,反向代理服务器就相当于目标服务器,即用户直接访问反向代理服务器就可以获得目标服务器的资源。同时,用户不需要知道目标服务器的地址,也无须在用户端作任何设定。反向代理服务器通常可用来作为Web加速,即使用反向代理作为Web服务器的前置机来降低网络和服务器的负载,提高访问效率。
7.1.3 区分
- 正向代理主要面对的是客户端,负责接收不同客户端的请求转发给服务端;而反向代理是面对服务端,负责将请求分发给集群。
- 正向代理主要保护的客户端的信息安全,隐藏客户端信息;而反向代理主要保护服务端信息安全,避免服务端被攻击。
7.2 使用Nginx搭建代理服务器
7.2.1 创建配置文件
# 复制一个新的配置文件
sudo cp /etc/nginx/conf.d/default.conf /etc/nginx/conf.d/proxy.conf
7.2.2 添加代理
修改proxy.conf
添加代理服务器
# 定义Tomcat集群
upstream tomcatserver
server 192.168.124.21:8080;
server
listen 80;
server_name www.tomcat.com;
location /
# 指定代理地址,注意要使用HTTP协议
proxy_pass http://tomcatserver;
若需要代理多个服务端,则在upstream
中追加server
即可并指定IP
注意代理集群名称(upstream)不能出现特殊字符
7.3 负载均衡
项目通过反向代理,可以使用Nginx代理多个服务器,因此就会涉及到请求最终会发送给哪个服务端去处理的问题。
Nginx默认使用轮询的方式进行请求,及请求完1号服务器,第二条请求去请求2号服务器依次类推。也可以为每个服务器设置权重,增加获取请求的概率。
7.3.1 负载均衡策略
- 轮询
Nginx的默认负载均衡策略,按照请求顺序你一个,我一个。
示例:upstream tomcatserver server 192.168.124.21:8080; server 192.168.124.22:8080;
- 权重
增加服务端获得请求的概率,在每个server
的代理服务后加上weight=1
,权重越大获得请求就越多。
示例:upstream tomcatserver server 192.168.124.21:8080 weight=100; server 192.168.124.22:8080 weight=200;
- IP绑定ip_hash
每个请求发送到服务端后进行绑定,这样为每个访客固定一个服务端,可以解决Session的问题。
示例:upstream tomcatserver ip_hash; server 192.168.124.21:8080; server 192.168.124.22:8080;
- fair
根据各个服务端的响应时间分配请求,响应时间短的优先分配。
示例:upstream tomcatserver server 192.168.124.21:8080; server 192.168.124.22:8080; fair;
- url_hash
按访问url的hash结果分配请求,使每个url定向到同一个后端服务器,后端服务器为缓存时比较有效。upstream tomcatserver server 192.168.124.21:8080; server 192.168.124.22:8080; hash $request_uri; hash_method crc32;
八、高并发
- 负载均衡:使用服务集群处理
- 动静分离:使用Nginx、CDN搭建静态资源服务器
- 缓存:以空间换时间,提高系统效率
- 限流:对访问流量进行控制
- 降级:对其他非必要业务进行服务降载
以上是关于NginxNginx基础操作的主要内容,如果未能解决你的问题,请参考以下文章
[Go] 通过 17 个简短代码片段,切底弄懂 channel 基础