nginx的安装和使用
安装相关库
nginx的安装需要Linux安装相关的几个库,否则配置和编译会出现错误,这几个库分别是
- gcc编译器:gcc
- openssl库:openssl openssl-devel
- pcre库:pcre pcre-devel
- zlib库:zlib zlib-devel
一次性安装的方法:
yum install gcc openssl openssl-devel pcre pcre-devel zlib zlib-devel -y
nginx的基本使用方法
nginx的启动
普通启动
切换到nginx安装目录的sbin目录下,执行:./nginx
通过配置文件启动
./nginx -c /usr/local/nginx/conf/nginx.conf /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf
解释: /usr/local/nginx/sbin/nginx 和 /usr/local/nginx/conf/nginx.conf 是nginx安装目录的sbin目录以及nginx配置文件所在的路径 , -c是指定配置文件
检查nginx是否启动
ps -ef | grep nginx
nginx体系结构由master进程和其worker进程组成; master进程读取配置文件,并维护worker进程,而worker进程则对请求进行实际处理
关闭nginx
优雅的关闭
找出nginx的进程号:ps -ef | grep nginx 执行命令:kill -QUIT 主pid 其中pid是主进程号的pid(master process),其他为子进程pid(worker process)
快速关闭
执行命令:kill -TERM 主pid
重启nginx
./nginx -s reload
nginx配置文件
学习nginx首先需要对它的核心配置文件nginx.conf有一定的认识
nginx的核心匹配文件主要由三个部分构成:
基本配置
events配置
http配置
基本配置 多个server配置
nginx.conf文件详解
#总体上分成三个部分构成:基本配置、events配置、HTTP配置,以下为配置详情
#------------------------基本配置-------------------------
#user nobody; #配置worker进程运行用户
worker_processes 1; #配置工作进程数目,根据硬件调整,通常等于CPU数量或者2倍于CPU数量
#error_log logs/error.log; #配置全局错误日志及类型,[debug | info | notice | warn | error | crit],默认是error
#error_log logs/error.log notice;
#error_log logs/error.log info;
#pid logs/nginx.pid; #配置进程pid文件
#------------------------events配置-------------------------
#配置工作模式和连接数
events {
worker_connections 1024; #配置每个worker进程连接数上限,nginx支持的总连接数就等于worker_processes * worker_connections
}
#------------------------HTTP配置-------------------------
#配置HTTP服务器,利用它的反向代理功能提供负载均衡支持
http {
#------------------------HTTP基本配置-------------------------
include mime.types; #配置nginx支持哪些多媒体类型,可以在conf/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日志及存放路径,并使用上面定义的main日志格式
#access_log logs/access.log main;
sendfile on; #开启高效文件传输模式
#tcp_nopush on; #防止网络阻塞
#keepalive_timeout 0;
keepalive_timeout 65; #长连接超时时间,单位:毫秒
#gzip on; #开启gzip压缩输出
#------------------------HTTP_多server配置-------------------------
server {
listen 80; #监听端口
server_name localhost; #配置服务名
#charset utf-8; #配置字符集
#access_log logs/host.access.log main; #配置本虚拟主机的访问日志
#默认的斜杠/的请求,当访问路径中有斜杠/,会被该location匹配到并进行处理
location / {
root html; #root是配置服务器默认网站根目录位置,默认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; 配置50x错误页面
location = /50x.html {
root 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;
#}
}
# another virtual host using mix of IP-, name-, and port-based configuration
#
#server {
# listen 8000;
# listen somename:8080;
# server_name somename alias another.alias;
# location / {
# root html;
# index index.html index.htm;
# }
#}
# HTTPS server
#
#server {
# listen 443 ssl;
# server_name localhost;
# ssl_certificate cert.pem;
# ssl_certificate_key cert.key;
# ssl_session_cache shared:SSL:1m;
# ssl_session_timeout 5m;
# ssl_ciphers HIGH:!aNULL:!MD5;
# ssl_prefer_server_ciphers on;
# location / {
# root html;
# index index.html index.htm;
# }
#}
}
nginx的主要应用
静态网站
修改配置文件
server {
listen 80; #监听端口
server_name localhost; #配置服务名
#charset utf-8; #配置字符集
#access_log logs/host.access.log main; #配置本虚拟主机的访问日志
#默认的斜杠/的请求,当访问路径中有斜杠/,会被该location匹配到并进行处理
location / {
root static_path; #配置静态网页根目录位置,默认nginx安装主目录下的html
index index.html index.htm; #配置首页文件的名称
}
}
负载均衡
访问入口只有一个,针对不同的请求分发到相应的服务器上去做处理
硬件负载均衡:eg: F5/深信服/Array等,缺点是费用昂贵,对于规模较小的网络应用成本太高 软件负载均衡:eg: nginx/LVS/HAProxy等,有点免费开源,成本低廉
实现方式
用户-->nginx负载均衡-->{Tomcat1,Tomcat2}访问动态资源
通过在nginx的nginx.conf 文件进行配置
1、在http模块上添加:
upstream www.myweb.com {
server 127.0.0.1:9100 weight=3;
server 127.0.0.1:9200 weight=1;
}
2、在server模块里添加
location /myweb {
proxy_pass <http://www.myweb.com>
}
#其中www.myweb.com字符串要和upstream后面的字符串相等
负载均衡策略
轮询(默认):在server后不添加weight参数 在http模块上添加:
upstream www.myweb.com {
server 127.0.0.1:9100;
server 127.0.0.1:9200;
}
权重:在server后添加weight参数(weight越大,权重也大,访问的次数就越多),访问几率和weight比接近 在http模块上添加:
upstream www.myweb.com {
server 127.0.0.1:9100 weight=3;
server 127.0.0.1:9200 weight=1;
}
ip_hash:也叫IP绑定,每个请求访问IP的hash值分配,这样每个访问客户端会固定访问一个后端服务器,可以解决会话Session丢失问题 在http模块上添加:
upstream www.myweb.com {
ip_hash;
server 127.0.0.1:9100 weight=3;
server 127.0.0.1:9200 weight=1;
}
最少连接:web请求会被转发到最少连接数的服务器上
upstream www.myweb.com {
least_conn;
server 127.0.0.1:9100 weight=3;
server 127.0.0.1:9200 weight=1;
}
负载均衡其他配置
upstream www.myweb.com {
server 127.0.0.1:9100;
server 127.0.0.1:9200 backup; #其他所有的非backup机器down的时候,才请求backup机器
}
upstream www.myweb.com {
server 127.0.0.1:9100;
server 127.0.0.1:9200 down; #down表示当前的server是down状态,不参与负载均衡
}
静态代理
通过在nginx的nginx.conf文件进行配置
1、通过在nginx.conf配置文件中配置静态资源的location
#当访问静态资源,则从Linux服务器/opt/static目录下获取(举例)
location ~ .*\\.(js|css|html|gif|jpeg|png|bmp|swf|ioc|rar|zip|txt|flv|mid|doc|ppt|pdf|xls|mp3|wma)$ {
root /opt/static;
}
#其中:~表示正则匹配,也就是说后面的内容可以是正则表达式匹配
# 第一个点.表示任意字符
# *表示一个或多个字符
# \\是转义字符,是后面点的转义字符标志
# |表示或者
# $表示结尾
#整个配置表示以.后面括号里面的这些为后缀结尾的文件都有nginx处理;
#注意:放置静态资源的目录,需要有足够的权限,权限不足会报403错误,建议:chmod 755
通过在nginx.conf配置文件中配置静态资源所在目录实现
location ~ .*/(css|js|img|images) {
root /opt/static
}
动静分离
nginx的负载均衡和静态代理结合在一起,就可以实现动静分离,这是实际应用常见的一种场景
动态资源,如jsp有tomcat或其它web服务器完成
静态资源,如图片,css,js等由nginx服务器完成
nginx在一台Linux上安装一份,可以启动多个nginx,每个nginx的配置文件不一样即可分类别(动态资源,静态资源)多配置
虚拟主机
虚拟主机就是把一台服务器划分成多个“虚拟”的服务器,这样我们的一台物理服务器就可以当做多个服务器来使用,从而可以配置多个网站
nginx提供虚拟主机的功能,就是为了让我们不需要安装多个nginx,就可以运行多个网站 nginx下,一个server标签就是一个虚拟主机 nginx的虚拟主机就是通过nginx.conf中server节点指定的,想要配置多个虚拟主机,配置多个server节点即可
配置虚拟主机通常有一下两种方式:
基于域名的虚拟主机
server{
listen 80;
server_name www.wang.com;
location /wang {
proxy_pass <http://www.wang.com>; #还应该配置名称为www.wang.com的负载均衡
}
}
server{
listen 80;
server_name www.bin.com;
location /bin {
proxy_pass <http://www.bin.com>; #还应该配置名称为www.bin.com的负载均衡
}
}
基于端口的虚拟主机
server{
listen 8080;
server_name www.wang.com;
location /wang {
proxy_pass <http://www.wang.com>;
}
}
server{
listen 9090;
server_name www.wang.com;
location /wang {
proxy_pass <http://www.wang.com>;
}
}
通过include的方式引入虚拟主机配置
include /usr/local/nginx/vhost/vhost.conf;
将虚拟目录的配置文件加入到“http{}”部分的末尾,与其他server并列; 其中vhost.conf中的内容同基于域名的虚拟主机的server配置相同 在nginx.conf中的http末尾include vhost.conf_path 即可