查看原文
其他

Nginx超详细入门!

本文介绍基于 Linux 系统的 nginx 安装以及简单使用

1、安装

1.1、安装 nginx 依赖的环境

使用 nginx 需要依赖一些其它的库,所以需要先准备好基础环境

# 编译 nginx 需要依赖 gcc
yum install gcc-c++
# 正则表达式支持
yum install -y pcre pcre-devel
# gzip 压缩算法支持
yum install -y zlib zlib-devel
# https 支持
yum install -y openssl openssl-devel
1.2、下载 nginx 安装包

一般下载到/usr/local/目录即可,可以直接去官方下载,再上传到对应目录。
也可以直接在对应目下执行如下命令下载:

wget -c https://nginx.org/download/nginx-1.18.0.tar.gz
1.3、安装 nginx

解压就很简单了:

tar -zxvf nginx-1.18.0.tar.gz

然后进入解压后的目录(/usr/local/nginx-1.18.0),配置 nginx:

./configure

如果需要支持 https,则需要执行如下的配置命令:

./configure --with-http_ssl_module

配置完成后,开始编译 nginx 源码:

make

编译完成后,开始安装 nginx:

make install

等待安装完成……

安装完成后,会生成一个和nginx-1.18.0目录同级的nginx目录,就是安装程序的目录。

1.4、启动 nginx

进入/usr/local/nginx/sbin目录

  • 启动 nginx:

./nginx

启动后在浏览器输入服务器地址,可以看到如下页面就好了:

  • 关闭 nginx,使用如下一个命令即可:

# 正常关闭
./nginx -s quit
# 暴力关闭
./nginx -s stop
  • 重启 nginx:

# 一般是修改配置文件后重启
./nginx -s reload
  • 查看 nginx 进程:

ps aux|grep nginx

2、简单使用

这里主要是对/usr/local/nginx/conf/nginx.conf文件进行相关的配置

2.1、静态代理

先在/opt/software下创建test目录,里边放一个index.html,内容是:

<h1>Hello World</h1>

接下来对nginx.conf做如下修改:

server { listen 8081; server_name localhost;
location / { root /opt/software/test; index index.html; }}

重启 nginx:

./nginx -s reload

在浏览器测试:

上边我们修改了server部分的配置,这样当访问 http://192.168.2.100:8081/index.html 时,nginx 会去/opt/software/test下找index.html。

由于index默认配置成了index.html,所以访问 http://192.168.2.100:8081会默认去找`index.html`,和上边的效果一样。

server模块相对于配置了一个站点,可以有多个;listen配置的是端口号,可以根据需求修改;server_name设置的是本机的地址,一般不需要修改;location模块则是指定站点要代理的静态资源、或者要转发的请求。

2.2、请求转发

添加一个新的server模块,使用proxy_pass配置要转发到的目标服务地址:

server { listen 8082; server_name localhost;
location / { proxy_pass http://192.168.3.2:1114/; }}

注意目标地址末尾有个斜杠,不加斜杠就无法正常的转发请求了。

重启 nginx。

目标地址上有一个hello接口:

@RestControllerpublic class HelloController { // 服务的端口号 @Value("${server.port}") Integer port;
@GetMapping("/hello") public String hello() { return "hello world" + "#" + port; }}

这样当请求 http://192.168.2.100:8082/hello 时请求会转发到 http://192.168.3.2:1114/hello 上:

2.3、负载均衡

上边我们只部署了一个目标服务,如果目标服务是以集群部署的,则可以使用 nginx 实现负载均衡,将请求转发到不同的服务节点上。这里我们模拟一个服务集群,将服务启动两次:

java -jar provider-0.0.1-SNAPSHOT.jar --server.port=1114
java -jar provider-0.0.1-SNAPSHOT.jar --server.port=1115

最终有两个服务节点:192.168.3.2:1114192.168.3.2:1115

niginx 默认的负载均衡策略是轮询,将请求轮流分发到不同服务器;还有权重+轮询,就是增加了不同服务器被轮询到的概率;最后是iphash,对客户端请求的ip进行hash操作,根据hash结果将客户端请求分发给同一台服务器处理,也可以一定程度上解决session不共享的问题,但不常用。

然后配置 nginx, 核心就是upstream指令:

# 配置集群中各个服务地址,给它们起一个统一的名字 providerupstream provider { server 192.168.3.2:1114; server 192.168.3.2:1115;}server { listen 8083; server_name localhost;
location / { # 使用 provider 代替服务地址 proxy_pass http://provider/; }}

重启 nginx。

当多次请求 http://192.168.2.100:8083/hello 时,请求会轮询转发到不同的目标服务上:

2.4、登录验证

有时候为了安全起见,保护数据,在访问 nginx 代理的资源之前,需要先进行登录验证。

首先需要安装htpasswd工具,命令如下:

yum install -y httpd-tools

接下来使用 htpasswd 工具来设置登录的用户名、密码,在/usr/local/nginx/conf/目录下执行如下命令:

htpasswd -c passwd admin

最终的用户名、密码会保存到名为passwd的文件中,admin是登录的用户名,执行命令后会提示输入密码:

查看 passwd 文件的内容,admin:后的内容就是加密后的密码:

关于 htpasswd 更详细的内容这里就不介绍了。

生成好了用户名、密码,接下来就是修改 nginx 配置文件,在server模块添加如下配置:

server { # 登录失败返回的提示信息 auth_basic "Please Login"; # 指定保存用户名、密码的文件路径,这里使用的是相对路径,也可以使用绝对路径 /usr/local/nginx/conf/ auth_basic_user_file passwd;}

这样访问当前站点代理的资源时,就都需要输入用户名、密码了:

也可以只给server中指定的location配置auth_basicauth_basic_user_file,这样只有访问对应location配置的资源代理时才需要登录验证。

2.5、前后端分离项目部署

在使用前后端分离模式开发项目时,前后项目打包后可以使用 nginx 来代理:

# 配置后端服务地址upstream myserver { server 192.168.2.100:8848;}
server { listen 8084; server_name localhost; location / { proxy_pass http://myserver/; proxy_redirect default; } location ~ .*\.(js|css|ico|png|jpg|eot|svg|ttf|woff|html) { # 配置前端打包后的项目路径 root /opt/software/test4/; }}

也是比较简单的,在root配置的目录中存放前端打包好的源码,upstream部分配置的是后端服务地址。

作者:SheHuan
链接:https://www.jianshu.com/p/bb11f1435f88
来源:简书

BAT等大厂Java面试经验总结

想获取 Java大厂面试题学习资料

扫下方二维码回复BAT就好了


回复 【加群】获取github掘金交流群

回复 【电子书】获取2020电子书教程

回复 【C】获取全套C语言学习知识手册

回复 【Java】获取java相关的视频教程和资料

回复 【爬虫】获取SpringCloud相关多的学习资料

回复 【Python】即可获得Python基础到进阶的学习教程

回复 【idea破解】即可获得intellij idea相关的破解教程

回复 BAT即可获得intellij idea相关的破解教程关注我gitHub掘金,每天发掘一篇好项目,学习技术不迷路!


回复 【idea激活】即可获得idea的激活方式

回复 【Java】获取java相关的视频教程和资料

回复 【SpringCloud】获取SpringCloud相关多的学习资料

回复 【python】获取全套0基础Python知识手册

回复 【2020】获取2020java相关面试题教程

回复 【加群】即可加入终端研发部相关的技术交流群

阅读更多

为什么HTTPS是安全的
因为BitMap,白白搭进去8台服务器...
《某厂内部SQL大全 》.PDF
字节跳动一面:i++ 是线程安全的吗?
大家好,欢迎加我微信,很高兴认识你!
在华为鸿蒙 OS 上尝鲜,我的第一个“hello world”,起飞!

相信自己,没有做不到的,只有想不到的

在这里获得的不仅仅是技术!


喜欢就给个“在看

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存