Nginx官网:http://nginx.org/
在线安装教程:http://nginx.org/en/linux_packages.html
一、目录结构
>>> whereis nginx #或者执行下面一条命令
>>> find / -name nginx
命令程序: /usr/sbin/nginx
主要配置文件: /etc/nginx/nginx.conf
日志目录: /var/log/nginx/
默认虚拟主机目录:/usr/share/nginx/html/
默认虚拟主机配置文件:/etc/nginx/conf.d/default.conf
主要配置文件nginx.conf中配置了虚拟主机配置目录conf.d/,我们将自定义的虚拟主机配置文件放于该目录下即可
二、相关命令
- 启动nginx
>>> nginx #适用于所有linux系统
>>> systemctl start nginx.service #适用于centos系统
- 重启nginx
>>> nginx -s reload #适用于所有linux系统
>>> systemctl restart nginx.service #适用于centos系统
- 关闭nginx
>>> nginx -s stop #适用于所有linux系统
>>> systemctl stop nginx.service #适用于centos系统
- 查看进程/端口调用
>>> netstat -ntpl | grep 80 #查看端口调用情况
>>> ps -aux | grep nginx #查看进程信息
- 使用指定的配置文件启动
>>> nginx -c /etc/nginx/nginx.conf #适用于所有linux系统
systemctl start nginx.service 指定了默认的配置文件
三、配置文件说明
- 主配置文件 nginx.conf
#运行nginx的用户
user nginx;
#工作的进程数,可以根据电脑cpu的数量来进行配置
worker_processes 1;
#错误日志输出位置,warn是输出级别
error_log /var/log/nginx/error.log warn;
#nginx运行时,进程号的存放位置
pid /var/run/nginx.pid;
#工作模式的配置
events {
#每个进程允许的连接数。一个nginx服务的最大连接数为进程数乘以允许连接数
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;
#超时时间,单位:秒
keepalive_timeout 65;
#gzip on;
#引入外部配置文件,包含虚拟主机的配置
include /etc/nginx/conf.d/*.conf;
}
- 虚拟主机配置文件夹default.conf(一个配置文件对应一个虚拟主机)
#虚拟主机的配置
server {
#监听的端口
listen 80;
#主机地址(ip或域名)
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 500 502 503 504 /50x.html;
#反馈页面的配置
location = /50x.html {
root /usr/share/nginx/html;
}
}
注:每次修改完配置文件后都需要重启Nginx服务器
四、实现虚拟主机的三种方式
- 基于不同的ip (listen不变,server_name改变)
- 基于不同的端口 (listen改变,server_name不变)
- 基于不同的域名 (listen不变,server_name改变)
五、Nginx做图片服务器
- 上传图片:使用ftp或sftp方式来将图片上传到指定的ftp目录。
- 下载图片:访问Nginx服务器,使用http请求来访问图片。
- 强调:Nginx文件服务器除了需要文件的读权限外,还需要有文件的所有父目录的可执行权限,否则使用http请求访问图片时会报403错误
- 步骤1:创建保存图片的文件夹,并通过ftp连接将图片上传到该目录中。
>>> mkdir -p /www/static/image
- 步骤2:修改虚拟主机配置文件
>>> vi /etc/nginx/conf.d/test1.conf
往配置文件中加入:
location /images {
root /www/static;
autoindex on; #打开目录浏览功能
}
#解释:访问http://ip/images实际上访问的是服务器中/www/static/images
六、Nginx反向代理
- 开启tomcat服务器,确保能正常访问。
- 创建虚拟主机配置文件,配置反向代理
>>> cd /etc/nginx/conf.d
>>> vi tomcat.conf #配置如下
>>> nginx -s reload
tomcat.conf:
- 注意:在Nginx配置文件中配置upstream时不能使用下划线“_”(如tomcat-addr不能写成tomcat_addr),否则在浏览器中访问代理服务器时,会显示404错误。-----据说Tomcat7可以使用下划线,但Tomcat8经测试不可以。
- 浏览器访问输入http://www.tomcat.com(经代理服务器后会访问到http://192.168.1.5:8080)
七、Nginx负载均衡
- 准备多个Tomcat服务器(测试为单虚拟机环境)
>>> cd /usr/local #到tomcat安装目录下
>>> cp -r apache-tomcat-8.5.55 tomcat0 #拷贝两份tomcat
>>> cp -r apache-tomcat-8.5.55 tomcat1
>>> vi tomcat0/conf/service.xml #修改配置文件中的端口号(如tomcat0访问端口8080,tomcat1访问端口8081 )
>>> vi tomcat1/conf/service.xml
- 修改每个Tomcat的访问主页,便于区分
>>> vi tomcat0/webapps/ROOT/index.jsp
>>> vi tomcat1/webapps/ROOT/index.jsp
- 启动所有Tomcat服务器
>>> ./tomcat0/bin/startup.sh #启动服务器tomcat,访问端口8080
>>> ./tomcat1/bin/startup.sh #启动服务器tomcat1,访问端口8081
4. 创建虚拟主机配置文件,配置负载均衡
>>> cd /etc/nginx/conf.d
>>> cp default.conf tomcat.conf #拷贝一份配置文件
>>> vi tomcat.conf #修改配置文件
tomcat.conf:
- 负载均衡策略
策略 | 说明 |
---|---|
轮询 | 默认方式 |
weight | 权重方式 |
ip_hash | 依据ip分配方式 |
least_conn | 最少连接方式 |
fair(第三方) | 响应时间方式 |
url_hash(第三方) | 依据URL分配方式 |
八、Nginx实现动静分离
简介:Tomcat处理静态资源效率不高,默认情况下所有资源都由Tomcat进行处理,会导致Web应用响应慢,占用系统资源。所以我们将静态资源交给Nginx处理,而Tomcat处理动态资源,实现动静分离。
- 创建静态资源文件夹并将Tomcat下的静态资源拷贝过来
>>> cd /www/static #切换至静态资源文件夹
>>> cp /usr/local/tomcat/webapps/ROOT/tomcat.css ./ #拷贝静态文件
>>> cp /usr/local/tomcat/webapps/ROOT/tomcat.png ./
>>> chmod 777 tomcat.css #修改文件权限
>>> chmod 777 tomcat.png
- 修改Nginx虚拟主机配置文件
>>> vi /etc/nginx/conf.d/tomcat.conf
tomcat.conf:
- 重启Nginx服务
>>> nginx -s reload
- 保证Tomcat服务器已被启动(如果没有,需要先启动)
>>> netstat -ntpl | grep 8080 #查看8080端口服务是否处于被监听状态
>>> netstat -ntpl | grep 8081
- 清除浏览器缓存,访问www.tomcat.com