虚拟安装Nginx以及Nginx基本使用
一、安装
下载官网:http://nginx.org/en/download.html
安装:(可能会报错,下面有解决方法!)
1.将压缩包导入虚拟机,在/usr/local解压安装
[root@yjh local]# tar -zxvf nginx-1.20.2.tar.gz
2.进入nginx文件夹,运行
//首先安装插件
yum -y install make zlib zlib-devel gcc gcc-c++ libtool openssl openssl-devel
# nginx会安装在默认位置
[root@yjh nginx]# ./configure #运行
----
nginx会安装在指定位置
./configure \
--prefix=/usr/local/nginx \
--sbin-path=/usr/local/nginx/nginx \
--conf-path=/usr/local/nginx/nginx.conf \
--pid-path=/usr/local/nginx/nginx.pid \
----
[root@yjh nginx]# make #编译
[root@yjh nginx]# make install #安装
3.启动nginx服务(进入安装后生成的sbin文件夹)
[root@yjh sbin]# pwd
/usr/local/nginx/sbin
[root@yjh sbin]# ./nginx
注意:以上运行和编译两个地方可能会报错
报错一:./configure报错
报错详情:./configure: error: the HTTP gzip module requires the zlib library.
解决:
yum install -y zlib-devel解决
然后重新执行./configure
-------------------------------------------------------------------------------
报错二:./nginx启动nginx服务失败
报错详情:nginx: [alert] could not open error log file: open() "/usr/local/nginx/logs/error.log" failed (2: No such file or directory)
2021/11/28 21:08:24 [emerg] 125049#0: open() "/usr/local/nginx/logs/access.log" failed (2: No such file or directory)
解决:
没有logs文件夹,在/usr/local/nginx路径下新建logs文件夹
[root@yjh nginx]# mkdir logs
重新执行./nginx,,无反应代表服务启动成功
最后:能够见到该页面代表服务真正启动成功
页面访问:192.168.23.140:80(ip地址自己改,端口默认为80)
注意:诺连接不上检查1.服务是否已启动、2.阿里云安全组是否开发端口、3.防火墙是否开放端口
常用命令:
cd /usr/local/nginx/sbin
在/usr/local/nginx下执行:
./nginx 启动nginx
./nginx -s stop 关闭nginx(强制停止)
./nginx -s quit 安全退出(一项一项的慢慢退出)
./nginx -s reload 重新加载配置文件
ps aux|grep nginx 查看nginx进程
service firewalld start 开启防火墙
service firewalld restart #重启防火墙
service firewalld stop #关闭防火墙
firewall-cmd --list-all #查看防火墙规则
firewall-cmd --query-port=8080/tcp #检查端口是否开放
firewall-cmd --permanent --add-port=80/tcp #开启80端口
firewall-cmd --permanent --remove-port=80/tcp #移除80端口
firewall-cmd --reload #重启防火墙(修改配置后要重启防火墙)
二、Nginx相关功能
反向代理和正向代理的区别就是:正向代理代理客户端,反向代理代理服务器。
1.正向代理
正向代理是一个位于客户端和原始服务器之间的服务器,为了从原始服务器取得内容,客户端向代理发送一个请求并指定目标(原始服务器),然后代理向原始服务器转交请求并将获得的内容返回给客户端。
应用在nginx的server段,不要server_name,需要添加一个resolver。
server {
# 配置DNS解析IP地址,比如 Google Public DNS,以及超时时间(5秒)
resolver 8.8.8.8; # 必需
resolver_timeout 5s;
# 监听端口
listen 8080;
access_log /home/reistlin/logs/proxy.access.log;
error_log /home/reistlin/logs/proxy.error.log;
location / {
# 配置正向代理参数
proxy_pass $scheme://$host$request_uri;
# 解决如果URL中带"."后Nginx 503错误
proxy_set_header Host $http_host;
# 配置缓存大小
proxy_buffers 256 4k;
# 关闭磁盘缓存读写减少I/O
proxy_max_temp_file_size 0;
# 代理连接超时时间
proxy_connect_timeout 30;
# 配置代理服务器HTTP状态缓存时间
proxy_cache_valid 200 302 10m;
proxy_cache_valid 301 1h;
proxy_cache_valid any 1m;
}
}
2.反向代理
反向代理,其实客户端对代理是无感知的,因为客户端不需要任何配置就可以访问,我们只需要将请求发送到反向代理服务器,由反向代理服务器去选择目标服务器获取数据后,在返回给客户端,此时反向代理服务器和目标服务器对外就是一个服务器,暴露的是代理服务器地址,隐藏了真实服务器IP地址。
http {
#反向代理
upstream yjh666{#yjh666名字是随便取得,对应下面的proxy_pass
//配置服务器资源
server 192.168.23.140:8080 weight=2;#weight权重、//负载均衡配置
server 192.168.23.140:8081 weight=1;
}
server {
listen 80;
server_name localhost;
//代理
location / {
root html;
index index.html index.htm;
proxy_pass http://yjh666
}
}
}
3.负载均衡
nginx是以反向代理的方式进行负载均衡的,其实现的分配策略被编进Nginx内核的有轮询、ip_hash、第三方的有fair、url_hash等。
其目的是:让能力强的服务器接收更多的请求,能力弱的服务器接收到更少的请求
4.动静分离
1、区别:
- 静态资源: 当用户多次访问这个资源,资源的源代码永远不会改变的资源。
- 动态资源:当用户多次访问这个资源,资源的源代码可能会发送改变。
2、介绍:
- 动静分离是让动态网站里的动态网页根据一定规则把不变的资源和经常变的资源区分开来,动静资源做好了拆分以后,我们就可以根据静态资源的特点将其做缓存操作,这就是网站静态化处理的核心思路
- 动静分离简单的概括是:动态文件与静态文件的分离。
- 伪静态:网站如果想被搜索引擎搜素到,动态页面静态技术freemarker等模版引擎技术
3、原因:
- 在我们的软件开发中,有些请求是需要后台处理的(如:.jsp,.do等等),有些请求是不需要经过后台处理的(如:css、html、jpg、js等等文件),这些不需要经过后台处理的文件称为静态文件,否则动态文件。因此我们后台处理忽略静态文件。这会有人又说那我后台忽略静态文件不就完了吗。当然这是可以的,但是这样后台的请求次数就明显增多了。在我们对资源的响应速度有要求的时候,我们应该使用这种动静分离的策略去解决。
- 动静分离将网站静态资源(HTML,JavaScript,CSS,img等文件)与后台应用分开部署,提高用户访问静态代码的速度,降低对后台应用访问。这里我们将静态资源放到nginx中,动态资源转发到tomcat服务器中。
- 因此,动态资源转发到tomcat服务器我们就使用到了前面讲到的反向代理了。
###静态资源访问
server {
listen 80;
server_name static.haoworld.com;
location /static/imgs {
root /Users/Hao/Desktop/Test;
index index.html index.htm;
}
}
###动态资源访问
server {
listen 80;
server_name www.haoworld.com;
location / {
proxy_pass http://127.0.0.1:8080;
index index.html index.htm;
}
}
动静分离参考博文:https://www.cnblogs.com/haoworld/p/nginx-shi-xian-dong-jing-fen-li.html
5.重写
Rewrite主要实现url地址重写,以及重定向,就是把传入web的请求重定向到其他url的过程.
1.Rewrite使用场景
*
地址跳转,用户访问www.drz.com这个URL是,将其定向至一个新的域名mobile.drz.com
*
协议跳转,用户通过http协议请求网站时,将其重新跳转至https协议方式
*
伪静态,将动态页面显示为静态页面方式的一种技术,便于搜索引擎的录入,同时建上动态URL地址对外暴露过多的参数,提升更高的安全性。
*
搜索引擎,SEO优化依赖于url路径,好记的url便于智齿搜索引擎录入
配置:
server {
listen 80;
server_name abc.com www.abc.com;
if ( $host != 'www.abc.com' ) {
rewrite ^/(.*) http://www.abc.com/$1 permanent;
}
location / {
root /data/www/www;
index index.html index.htm;
}
error_log logs/error_www.abc.com.log error;
access_log logs/access_www.abc.com.log main;
}
三、Nginx实战运用
实现反向代理和负载均衡
1.准备一个项目,打成jar包(yjh666.jar),并启动两个相同的服务
java -jar .\yjh666.jar --server.port=8080
java -jar .\yjh666.jar --server.port=8081
2.更改nginx配置
#全局配置
#event配置
events {
worker_connections 1024;
}
http {
#http配置
#反向代理
upstream yjh666{#yjh666名字是随便取得,对应下面的proxy_pass
//配置服务器资源
server 192.168.23.140:8080 weight=2;#weight权重、//负载均衡配置
server 192.168.23.140:8081 weight=1;
}
server {
listen 80;
server_name localhost;
//代理
location / {
root html;
index index.html index.htm;
proxy_pass http://yjh666
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
server {
listen 443; #https
server_name localhost;
}
}
然后重新加载一下配置,使配置生效
[root@yjh nginx]# ./nginx -s reload
3.浏览器访问:192.168.23.140
–
–
–
这两台服务器访问访问次数接近设置的2:1权重访问!!