- 1. 简介
- 2. 正向代理和反向代理
- 3. Nginx安装以及相关命令
- —prefix=表示要安装到的目录
- 4. Nginx 核心配置文件说明
- 配置虚拟主机
- charset koi8-r; # 配置字符集
- access_log logs/host.access.log main; # 配置本虚拟主机的访问日志
- error_page 404 /404.html;
- redirect server error pages to the static page /50x.html
- 配置50x页面
- 精确匹配
- proxy the PHP scripts to Apache listening on 127.0.0.1:80
- 反向代理
- location ~ .php$ {
- http://127.0.0.1;">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;
- }
- HTTPS的配置见6.总结
- HTTPS server
- 5. Nginx的主要应用
- 6. 总结
1. 简介
Nginx (“engine x”) 是一个高性能的 HTTP 和反向代理服务器,特点是占有内存少,并发能力强
2. 正向代理和反向代理
2.1 正向代理
**正向代理**
类似一个跳板机,代理访问外部资源。比如:我是一个用户,我访问不了某网站,但是我能访问一个代理服务器,这个代理服务器,它能访问那个我不能访问的网站,于是我先连上代理服务器,告诉它我需要那个无法访问网站的内容,代理服务器去取回来,然后返回给我。
2.2 反向代理
**反向代理(Reverse Proxy)**
方式是指以代理服务器来接受 internet 上的连接请求,然后将请求转发给内部网络上的服务器,并将从服务器上得到的结果返回给 internet 上请求连接的客户端,此时代理服务器对外就表现为一个反向代理服务器;
3. Nginx安装以及相关命令
3.1 Nginx安裝
在 hadoop101上运行 yum,安装相关依赖包
sudo yum -y install openssl openssl-devel pcre pcre-devel zlib zlib-devel gcc gcc-c++
上传nginx的tar包至
/opt /software
,并解压tar -zxvf nginx-1.12.2.tar.gz
进入解压缩目录,执行编译及安装 ```bash ./configure —prefix=/opt/module/nginx make && make install
—prefix=表示要安装到的目录
- 安装成功后,/opt/module/nginx 目录下结构
![image.png](https://cdn.nlark.com/yuque/0/2021/png/668367/1631622982868-f444d326-f29e-4389-8770-1835ea6617d3.png#clientId=u0cf3daf3-c554-4&crop=0&crop=0&crop=1&crop=1&from=paste&height=101&id=u7602ab9b&margin=%5Bobject%20Object%5D&name=image.png&originHeight=201&originWidth=795&originalType=binary&ratio=1&rotation=0&showTitle=false&size=27339&status=done&style=none&taskId=u4e774412-b442-40c4-b943-1face672427&title=&width=397.5)
<a name="AV4o8"></a>
## 3.2 Nginx启动
- 在/opt/module/nginx/sbin 目录下执行
```bash
# 启动
./nginx
# 通过配置文件启动,其中-c是指定配置文件,而且配置文件路径必须指定绝对路径
./nginx -c /opt/module/nginx/conf/nginx.conf
#/opt/module/nginx/sbin/nginx -c /opt/module/nginx/conf/nginx.conf
# 重启
./nginx -s reload
# 关闭
./nginx -s stop
# 配置检查
# 当修改 Nginx 配置文件后,可以使用 Nginx的-t 命令进行配置文件语法检查,用于检查 Nginx 配置文件是否正确
/opt/module/nginx/sbin/nginx -c /opt/module/nginx/conf/nginx.conf –t
- 如果在 非root用户下面启动会报错
- 原因:nginx 占用 80 端口,默认情况下非 root 用户不允许使用 1024 以下端口
- 解决:让当前用户的某个应用也可以使用 1024 以下的端口
- sudo setcap cap_net_bind_service=+eip /opt/module/nginx/sbin/nginx
- 注意:要根据自己的实际路径进行配置
- 如果 80 端口号被占用 httpd
- sudo systemctl stop httpd
- sudo systemctl disable httpd
- 部分机器启动时报错:
- /usr/local/nginx/sbin/nginx: error while loading shared libraries:libpcre.so.1: cannot open shared object file: No such file or directory
- 解决:ln -s /usr/local/lib/libpcre.so.1 /lib64
- 查看启动情况
# 因为 nginx 不是用 java 写的,所以不能通过 jps 查看
ps -ef | grep nginx
- 查看启动情况
- 在浏览器中输入 http://hadoop101/访问
3.3 Nginx重启
# 重启
./nginx -s reload
3.4 Nginx关闭
# 关闭
./nginx -s stop
3.5 Nginx配置检查
# 配置检查
# 当修改 Nginx 配置文件后,可以使用 Nginx的-t 命令进行配置文件语法检查,用于检查 Nginx 配置文件是否正确
/opt/module/nginx/sbin/nginx -c /opt/module/nginx/conf/nginx.conf –t
4. Nginx 核心配置文件说明
核心配置文件位于 Nginx 的安装目录
/opt/module/nginx/conf
目录下,名字为**nginx.conf**
4.1 基本配置user|worker_processes|error_log|pid
# 配置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文件
pid logs/nginx.pid;
4.2 events
# 配置工作模式和连接数
events {
# ======配置每个worker进程连接数上限,nginx支持的总连接数就等于worker_processes * worker_connections======
worker_connections 1024;
}
4.3 http配置(重点)
4.3.1 基本配置
# 配置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压缩输出
4.3.2 server(可配置多个)
server———配置对应的服务器
- listen———监听的端口号
- server_name———IP
- ssi on;//开启ssi支持
- ssi_silent_errors on;//默认为off,设置为on则在处理SSI文件出错时不输出错误信息
- ssi_types://默认为 ssi_types text/html,如果需要支持shtml(服务器执行脚本,类似于jsp)则需要设置为ssi_types text/shtml
location 虚拟主机———虚拟路径
- alias———映射的实际路径
- Access-Control-Allow-Origin 外域地址———允许跨域访问的外域地址。如果允许任何站点跨域访问则设置为*,通常这是不建议的。
- Access-Control-Allow-Credentials true/false———允许客户端携带证书访问
- Access-Control-Allow-Methods GET———允许客户端跨域访问的方法
proxy_pass———服务器列表名,与upstream结合使用 ```nginx
配置虚拟主机
server { listen 80; # 配置监听80端口 server_name localhost; # 配置服务名
charset koi8-r; # 配置字符集
access_log logs/host.access.log main; # 配置本虚拟主机的访问日志
# 默认的匹配斜杠/的请求,当访问路径中有斜杠/,会被该location匹配到并进行处理
location / {
root html; # root是配置服务器的默认网站根目录位置,默认是nginx安装目录下的html目录
index index.html index.htm; # 配置首页文件的名称
}
# 配置404的页面
error_page 404 /404.html;
redirect server error pages to the static page /50x.html
配置50x页面
error_page 500 502 503 504 /50x.html;
精确匹配
location = /50x.html {
root html;
# proxy pass http://www.xxx.com 反向代理,http://upstream后配置的名称
}
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;
}
}
HTTPS的配置见6.总结
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;
# }
#}
<a name="tpljc"></a>
### 4.3.3 upstream(手动添加)--- 服务器列表,负载均衡
```nginx
# ex:Flink实时数仓案例使用如下配置:
# www.xxx.com是指location中配置的proxy_pass,即为访问www.xxx.com,反向代理分发到upstream下的三台主机上
upstream www.xxx.com {
server hadoop101:8081 weight=1;
server hadoop102:8081 weight=2;
server hadoop103:8081 weight=3;
}
# 注意:每行配置完毕后有分号
# upstream------实现请求转发,负载均衡
# weight------指定负载均衡权重
# server------指定反向代理的服务器
# ip_hash------访问此ip,固定访问哪个tomcat服务器(粘性session)
5. Nginx的主要应用
5.1 静态网站部署
Nginx 是一个 HTTP 的 web 服务器,可以将服务器上的静态文件(如 HTML、图片等) 通过 HTTP 协议返回给浏览器客户端
5.2 负载均衡
在网站创立初期,一般都使用单台机器对外提供集中式服务。随着业务量的增大, 一台服务器不够用,此时就会把多台机器组成一个集群对外提供服务,但是,网站对外提供的访问入口通常只有一个,比如 www.web.com。那么当用户在浏览器输入 www.web.com 进行访问的时候,如何将用户的请求分发到集群中不同的机器上呢,这就是负载均衡要做的事情。
负载均衡通常是指将请求”均匀”分摊到集群中多个服务器节点上执行,这里的均匀是指 在一个比较大的统计范围内是基本均匀的,并不是完全均匀 常用的负载均衡策略:轮询、权重、备机…
5.3 静态代理
把所有静态资源的访问改为访问 nginx,而不是访问 tomcat,这种方式叫静态代理。 因为 nginx 更擅长于静态资源的处理,性能更好,效率更高。 所以在实际应用中,我们将静态资源比如图片、css、html、js 等交给 nginx 处理,而不是由 tomcat 处理。
5.4 动静分离
Nginx 的负载均衡和静态代理结合在一起,可以实现动静分离,这是实际应用中常见的一种场景。 动态资源,如 jsp 由 tomcat 或其他 web 服务器完成 静态资源,如图片、css、js 等由 nginx 服务器完成 它们各司其职,专注于做自己擅长的事情 动静分离充分利用了它们各自的优势,从而达到更高效合理的架构
5.5 虚拟主机
虚拟主机,就是把一台物理服务器划分成多个“虚拟”的服务器,这样我们的一台物理服务器就可以当做多个服务器来使用,从而可以配置多个网站。
Nginx 提供虚拟主机的功能,就是为了让我们不需要安装多个 Nginx,就可以运行多 个域名不同的网站。
Nginx 下,一个 server 标签就是一个虚拟主机。nginx 的虚拟主机就是通过 nginx.conf 中 server 节点指定的,想要设置多个虚拟主机,配置多个 server 节点即可。
比如一个公司有多个二级域名,没有必要为每个二级域名都提供一台 Nginx 服务器, 就可以使用虚拟主机技术,在一台 nginx 服务器上,模拟多个虚拟服务器。
6. 总结
6.1 基本步骤
- 先准备Tomcat,修改Server.xml中的端口号(server、Connector、Connector(jta)三个标签)
- 解压Nginx,修改nginx.conf文件
- 配置一个upStream 服务器列表名{服务器1的IP+端口,服务器2IP+端口…}
- 配置一个server(反向代理服务器),里面有端口,域名,location里面再配置一个proxy_pass=服务器列表名
6.2 配置项
- upstream———服务器列表,实现请求转发,负载均衡
- weight———负载均衡权重
- server———反向代理的服务器
- ip_hash———访问此ip,固定访问哪个tomcat服务器(粘性session)
- server———配置对应的服务器
- listen———监听的端口号
- server_name———IP
- ssi on;//开启ssi支持
- ssi_silent_errors on;//默认为off,设置为on则在处理SSI文件出错时不输出错误信息
- ssi_types://默认为 ssi_types text/html,如果需要支持shtml(服务器执行脚本,类似于jsp)则需要设置为ssi_types text/shtml
- location 虚拟主机———虚拟路径
- alias———映射的实际路径
- Access-Control-Allow-Origin 外域地址———允许跨域访问的外域地址。如果允许任何站点跨域访问则设置为*,通常这是不建议的。
- Access-Control-Allow-Credentials true/false———允许客户端携带证书访问
- Access-Control-Allow-Methods GET———允许客户端跨域访问的方法
- proxy_pass———服务器列表名,反向代理