ngix(engine x)--高性能的http和反向代理服务器
nginx优点:源代码以BSD许可证发布,稳定性,丰富的功能集,示例配置文件,低系统资源的消耗
nginx主要是用来做:1,虚拟主机
2,负载均衡
3,动静分离
4,反向代理
推荐几个学习网站:博客园,简书,stackOverflow
下载:linux:nginx-1.13.9.tar.gz
windows:nginx-1.13.9.zip
安装
linux安装(生产环境):
1.解压nginx-1.13.6.tar.gz
tar -zxvf nginx-1.13.6.tar.gz
2.安装编译环境(需要root用户)
#gcc
yum install gcc-c++
#pcre
yum install -y pcre pcre-devel
#zlib
yum install -y zlib zlib-devel
#openssl
yum install -y openssl openssl-devel
3.编译&安装(底层是c,需要编译安装)
cd nginx-1.13.6
(安装一般使用/usr/local目录,mkdir -p /usr/local/nginx/bin)
./configure–prefix=/usr/local/nginx/bin
make
make install
4.命令
cd /usr/local/nginx/bin
sbin/nginx #启动,如果出现403将 conf/nginx.conf 头部添加user root;
(使用自定的配置文件启动 sbin/nginx -c conf/nginx_file)
sbin/nginx -s stop #停止
sbin/nginx-s quit #停止
sbin/nginx-s reload #重新加载配置文件
windows安装(自学):
1.怎么搭建文件服务器?
http服务器
nginx默认启动的时候使用conf/nginx.conf
worker_processes 1; #工作核心(默认即可,一般情况与服务器核有关):一个请求过来了,请求分发(相当于一个调度器)
events{
worker_connections 1024; #一瞬间最大连接数(默认即可)
}
http{
includemime.types; #可以访问的媒体类型(默认即可)
default_typeapplication/Octet-stream; (默认即可)
sendfile on; (默认即可)
keepalive_timeout 65; (默认即可)
server { #主要修改的地方
listen 80; # 监听的端口
server_name localhost; # 服务器的Ip
location/ {
root html; # 访问的根目录 html
index index.html index.htm; # 默认访问页面
}
}
}
用sftp协议将文件上传到nginx服务器中(java实现)(工具类)
依赖:jsch包
/**
*@author
*@date
*@param host主机,
* port 端口,
* username 用户名,
* password 密码,
* is 输入流,
* fileName 文件名, 文件名 需要经过uuid加密
* path 文件上传的路径]
*@return java.lang.String
*/
//与spring整合的时候,可以将这些属性放到配置文件中
public String upload(String host,Integer port,String username,
Stringpassword,InputStream is,String fileName,
String path) throwsException {
//创建对象
JSch jsch = new JSch();
//根据用户名,主机IP,端口获取一个session对象
Session session =jsch.getSession(host, username, port);
//设置密码
if(password != null){
session.setPassword(password);
}
//设置第一次访问的时候 不要检查一些额外配置
Properties configTemp = newProperties();
configTemp.put("StrictHostKeyChecking","no");
//为session对象设置Properties
session.setConfig(configTemp);
//设置timeout时间 5秒
//session.setTimeout(5000);
//连接服务器
session.connect();
//可以使用session进行操作
//打开sftp管道
ChannelSftp channel = (ChannelSftp)session.openChannel("sftp");
//建立sftp通道的连接
channel.connect();
//上传 最后一个参数 覆盖还是上传
channel.put(is,path+"/"+fileName,ChannelSftp.OVERWRITE);
//退出
channel.quit();
//关闭流
if(channel != null){
channel.disconnect();
}
if(session != null){
session.disconnect();
}
return"http://ip/"+fileName;//可以将这个链接保存到数据库中
}
2.反向代理(用nginx代理tomcat等服务器)
http{
# 后台服务器列表
upstream tomcat_server{
server127.0.0.1:8080; #如果有多个服务器,可以配置多个
}
server {
listen 80; # 监听的端口
server_name localhost; # 服务器的Ip
location/ {
proxy_pass http://tomcat_server; #代理服务器地址
}
}
}
3.虚拟主机(将一台服务器,虚拟出多台服务器,供多人使用)
在一台主机上搭建多个网站,使用的端口都是一样的
http{
# 后台服务器列表
upstream sina_server{
server127.0.0.1:8080;
}
upstreamsohu_server{
server127.0.0.1:8081;
}
server {
listen 80; # 监听的端口
server_name www.sina.com; # 服务器的Ip
location/ {
proxy_pass http://sina_server;
}
}
server {
listen 80; # 监听的端口
server_name www.sohu.com; # 服务器的Ip
location/ {
proxy_pass http://sohu_server;
}
}
}
4.负载均衡(默认策略是:轮寻)
http{
# 后台服务器列表
# 负载均衡
upstream sina_server{
server127.0.0.1:8080 weight=10; #策略 权重2:1概率
server 127.0.0.1:8082 weight=5;
}
server {
listen 80; # 监听的端口
server_name www.sina.com; # 服务器的Ip
location/ {
proxy_pass http://sina_server;
}
}
5.动静分离(将静态资源放到nginx服务器中)
server {
listen 80; # 监听的端口
server_name www.sohu.com; # 服务器的Ip
# 对非静态资源的处理
location/ {
proxy_pass http://sohu_server;
}
# 对静态资源处理
location~ .*\.(js|css|ico|png|jpg|eot|svg|ttf|woff){
rootfile;
#file文件目录
}
}
如何处理高并发问题:
1.集群
2.动静分离.负载均衡
3.做缓存
4.消息队列(限流)