Nginx是一个高性能Web服务器、反向代理服务器、邮件代理服务器。
只能处理静态资源。
内存少,并发强。高性能、低系统资源消耗。
基于C语言编写。
主要用于 静态网站部署、负载均衡、静态代理、动静分离、虚拟主机。
查看网站使用的Server
请求网站,查看GET根路径,查看响应头中Server项
如taobao使用 server: Tengine
163显示的是AliyunOSS
google显示gws
百度显示bws/1.1
qq显示squid/3.5.24
没找到一个直接用Nginx的。。。。
nginx官网用的是 cloudflare-nginx
nginx客户第一个adobe用的是Apache。。。。
反向代理Reverse Proxy。以代理服务器接网络上请求,请求转发内部网络服务器,并将服务器结果返回给网络请求。
浏览器 -> Nginx -> tomcat 返回 -> Nginx -> 浏览器
正向代理,即跳板,代理访问外部资源。如VPN。
1,安装
https://nginx.org/en/download.html
https://nginx.org/download/nginx-1.20.2.tar.gz
解压
[senrsl@localhost nginx]$ tar -zxvf nginx-1.20.2.tar.gz
编译环境
[senrsl@localhost nginx-1.20.2]$ sudo yum install gcc openssl openssl-devel pcre pcre-devel zlib zlib-devel -y
编译
[senrsl@localhost nginx-1.20.2]$ ./configure
--prefix=/home/senrsl/nginx/out //安装的目标目录
。。。
checking for zlib library ... found
creating objs/Makefile
Configuration summary
+ using system PCRE library
+ OpenSSL library is not used
+ using system zlib library
nginx path prefix: "/home/senrsl/nginx/out"
nginx binary file: "/home/senrsl/nginx/out/sbin/nginx"
nginx modules path: "/home/senrsl/nginx/out/modules"
nginx configuration prefix: "/home/senrsl/nginx/out/conf"
nginx configuration file:
"/home/senrsl/nginx/out/conf/nginx.conf"
nginx pid file: "/home/senrsl/nginx/out/logs/nginx.pid"
nginx error log file: "/home/senrsl/nginx/out/logs/error.log"
nginx http access log file:
"/home/senrsl/nginx/out/logs/access.log"
nginx http client request body temporary files:
"client_body_temp"
nginx http proxy temporary files: "proxy_temp"
nginx http fastcgi temporary files: "fastcgi_temp"
nginx http uwsgi temporary files: "uwsgi_temp"
nginx http scgi temporary files: "scgi_temp"
[senrsl@localhost nginx-1.20.2]$
编译安装
[senrsl@localhost nginx-1.20.2]$ make
[senrsl@localhost nginx-1.20.2]$ make install
安装目标目录应该是 /usr/local/nginx,不然还得配环境变量。。。。
[senrsl@localhost nginx-1.20.2]$ ll /usr/local/nginx/
总用量 4
drwxr-xr-x. 2 root root 4096 6月 29 02:36 conf
drwxr-xr-x. 2 root root 40 6月 29 02:36 html
drwxr-xr-x. 2 root root 6 6月 29 02:36 logs
drwxr-xr-x. 2 root root 19 6月 29 02:36 sbin
[senrsl@localhost nginx-1.20.2]$
安装完成。
2,启动关闭重启
[senrsl@localhost out]$ sudo ./sbin/nginx
[root@localhost out]# ps -ef | grep nginx
nobody 14772 1 0 03:36 ? 00:00:00 nginx: worker
process
root 14825 14786 0 03:42 pts/7 00:00:00 grep
--color=auto nginx
[root@localhost out]# kill -9 14772
[root@localhost out]# ./sbin/nginx -c conf/nginx.conf
[root@localhost out]# ps -ef | grep nginx
root 15036 1 0 04:28 ? 00:00:00 nginx: master
process ./sbin/nginx -c conf/nginx.conf
nobody 15037 15036 0 04:28 ? 00:00:00 nginx: worker
process
root 15039 14786 0 04:28 pts/7 00:00:00 grep
--color=auto nginx
[root@localhost out]#
[root@localhost out]# ps -ef | grep nginx
root 15036 1 0 04:28 ? 00:00:00 nginx: master
process ./sbin/nginx -c conf/nginx.conf
nobody 15037 15036 0 04:28 ? 00:00:00 nginx: worker
process
root 15039 14786 0 04:28 pts/7 00:00:00 grep
--color=auto nginx
[root@localhost out]# kill -QUIT 15036 //等待处理请求完成后关闭
[root@localhost out]# ps -ef | grep nginx
root 15048 14786 0 04:31 pts/7 00:00:00 grep
--color=auto nginx
[root@localhost out]#
[root@localhost out]# ./sbin/nginx -c conf/nginx.conf
[root@localhost out]# ps -ef | grep nginx
root 15056 1 0 04:32 ? 00:00:00 nginx: master
process ./sbin/nginx -c conf/nginx.conf
nobody 15057 15056 0 04:32 ? 00:00:00 nginx: worker
process
root 15059 14786 0 04:32 pts/7 00:00:00 grep
--color=auto nginx
[root@localhost out]# kill -TERM 15056 //不管请求是否完成,直接关闭
[root@localhost out]# ps -ef | grep nginx
root 15063 14786 0 04:33 pts/7 00:00:00 grep
--color=auto nginx
[root@localhost out]#
[root@localhost out]# ./sbin/nginx -c conf/nginx.conf
[root@localhost out]# ./sbin/nginx -s reload //重启
[root@localhost out]#
启动后一直报403,然后测试发现启动/usr/local/nginx路径就正常。。。。
3,配置检查
[root@localhost out]# ./sbin/nginx -c conf/nginx.conf -t
nginx: the configuration file
/home/senrsl/nginx/out/conf/nginx.conf syntax is ok
nginx: configuration file /home/senrsl/nginx/out/conf/nginx.conf
test is successful
[root@localhost out]#
4,版本信息
[root@localhost out]# ./sbin/nginx -v
nginx version: nginx/1.20.2
[root@localhost out]# ./sbin/nginx -V
nginx version: nginx/1.20.2
built by gcc 4.8.5 20150623 (Red Hat 4.8.5-44) (GCC)
configure arguments: --prefix=/home/senrsl/nginx/out
[root@localhost out]#
5,配置文件 nginx.conf
#配置worker进程运行用户 nobody也是一个linux用户,一般用于启动程序,没有密码
user nobody;
#配置工作进程数目,根据硬件调整,通常等于CPU数量或者2倍于CPU数量
worker_processes 1;
#配置全局错误日志及类型,[debug | info | notice | warn | error | crit],默认是error
error_log logs/error.log;
#error_log logs/error.log notice;
#error_log logs/error.log info;
pid logs/nginx.pid; #配置进程pid文件
###====================================================
#配置工作模式和连接数
events {
worker_connections 1024; #配置每个worker进程连接数上限,nginx支持的总连接数就等于worker_processes * worker_connections
}
###===================================================
#配置http服务器,利用它的反向代理功能提供负载均衡支持
http {
#配置nginx支持哪些多媒体类型,可以在conf/mime.types查看支持哪些多媒体类型
include 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压缩输出
###-----------------------------------------------
#配置虚拟主机
server {
listen 80; #配置监听端口
server_name localhost; #配置服务名
#charset koi8-r; #配置字符集
#access_log logs/host.access.log main; #配置本虚拟主机的访问日志
#默认的匹配斜杠/的请求,当访问路径中有斜杠/,会被该location匹配到并进行处理
location / {
#root是配置服务器的默认网站根目录位置,默认为nginx安装主目录下的html目录
root 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;
}
#PHP 脚本请求全部转发到Apache处理
# proxy the PHP scripts to Apache listening on 127.0.0.1:80
#
#location ~ \.php$ {
# proxy_pass http://127.0.0.1;
#}
#PHP 脚本请求全部转发到FastCGI处理
# 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;
#}
#禁止访问 .htaccess 文件
# 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服务,安全的网络传输协议,加密传输,端口443,运维来配置
#
# 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;
# }
#}
}
6,部署ace静态资源
[root@localhost nginx]# mv /home/senrsl/nginx/ace /opt/ace
配置文件增加
location / {
root html;
index index.html index.htm;
}
location /ace {
root /opt;
index login.html index.html index.htm;
}
重启
[root@localhost nginx]# ./sbin/nginx -s reload
访问
http://192.168.0.121/ace/
7,负载均衡
硬件负载均衡器,F5、Array、深信服等。
软件负载均衡,Nginx、HVS、HAProxy等。
1)部署两个tomcat到服务器
需要修改conf.xml中默认端口
一个默认为 8080、8005、8009
第二个改成 8081、8006、8019
[senrsl@localhost apache-tomcat-8.5.81]$ vi
webapps/examples/index.html
增加端口号
代理目标为 http://192.168.0.121:8080/examples/
启动即可。
2)nginx配置代理指向两个tomcat
upstream www.tomcat.com { //网址目标
server 192.168.0.121:8080;
server 192.168.0.121:8081;
}
server {
listen 80;
server_name localhost;
#charset koi8-r;
#access_log logs/host.access.log main;
location / {
root html;
index index.html index.htm;
}
location /examples {
proxy_pass http://www.tomcat.com; //代理网址
}
3) 测试,默认轮询两个tomcat。
http://192.168.0.121/examples/
依次展示 8081、8082页面。
8,负载均衡策略
四种策略
1)轮询
需要性能一致,不然会导致消息堆积。
2)权重策略
server 后面加 weight=权重值如5
性能不一致时,可以配权重。
upstream www.tomcat.com {
server 192.168.0.121:8080 weight=2;
server 192.168.0.121:8081 weight=1;
}
3)最小连接数
least_conn
那个服务器不忙,就发给哪个。
4)ip_hash
以上三种策略都会存在session丢失问题
ip_hash也叫ip绑定,每个请求按访问ip的hash值分配,这样每个请求客户端会固定访问一个后端服务器,解决session丢失问题。
upstream www.tomcat.com {
ip_hash;
server 192.168.0.121:8080;
server 192.168.0.121:8081;
}
5)备份服务器
标记backup
只有其他服务器都宕机,才会分配给备份服务器。
6)服务器标记down
标记down后,表示宕机。
9,静态代理
静态资源从tomcat中抽离出来,给Nginx来处理。
1)拦截匹配静态资源后缀
使用正则表达式,拦截后缀
2)拦截匹配静态资源所在目录
location /examples {
proxy_pass http://www.tomcat.com;
}
location ~ .*/(css|js|img|images){
root /opt/static;
}
然后
cp webapps/ROOT/tomcat.svg /opt/static/examples/img/
如果没权限,会403
然后修改8080的index.html增加图片展示
<img src="img/tomcat.svg"/>
这样图片资源请求的就不是Tomcat里的,而是Nginx里的。实际目录为/opt/static下。
10,动静分离
动态资源如jsp放到tomcat。
静态资源如jpg、css、js放到Nginx。
用户 -> Nginx(负载均衡) -> tomcat动态资源
-> tomcat动态资源
->nginx静态资源
->nginx静态资源
一个nginx用来做负载均衡,两个tomcat托管动态资源,两个nginx托管静态资源。
11,虚拟主机
一个虚拟主机配置多个域名,如 bj.58.com、tj.58.com
1)域名相同,端口不同
如 58.com:8080、58.com:8081
2)域名不同,端口相同
如访问 bj.58.com转到tomcat1,tj.58.com转到tomcat2。
配置
##虚拟主机
upstream bj.test.com {
server 192.168.0.121:8080;
}
server {
listen 80;
server_name bj.test.com;
location / {
proxy_pass http://bj.test.com;
}
}
upstream tj.test.com {
server 192.168.0.121:8081;
}
server {
listen 80;
server_name tj.test.com;
location / {
proxy_pass http://tj.test.com;
}
}
## 之前
upstream www.tomcat.com {
server 192.168.0.121:8080;
server 192.168.0.121:8081;
}
server {
listen 80;
server_name localhost;
。。。。
然后本地修改域名映射 bj.test.com、tj.test.com到192.168.0.121也就是nginx负载均衡上。
测试bj.test.com 转到8080tomcat
测试tj.test.com转到8081tomcat.
或者可以定义三个conf文件,每次以不同的配置文件启动也可以。
senRsl
2022年06月29日17:42:09
没有评论 :
发表评论