文章目录
- 前言
- Windows
- Linux
- MacOS
- 端口配置
- 反向代理
- 配置HTTPS
- 资源链接
前言
本文将介绍Nginx
的基本安装及配置,并给出不同平台(Windows
、Linux
、MacOS
)下的安装及配置方式。最后,本文所使用的Nginx
版本文件可见文末的网盘链接或者通过官网链接自行选择下载。
Windows
在windows
上我安装的是nginx-1.21.1
,并且采用压缩包安装方式(压缩包见文末资源链接),首先将压缩包解压到指定文件夹(这里位置可以自己选择其它位置,一般不建议系统盘,可能会出现权限问题,由于我使用的虚拟机环境测试,所以也就随意了):
然后即可点击目录下的nginx.exe
运行,双击后可以看到一个一闪而过的黑窗口,然后我们就可以在本机通过浏览器访问测试,在此之前,先看一下ip
地址:
然后在浏览器访问测试(Nginx
默认启动端口为80
):
如果想要关闭,则可以在任务任务管理器中选择关闭,或者在安装目录下执行nginx.exe -s stop
命令即可。
Linux
在Linux
上我安装的是nginx-1.21.1
,并且采用压缩包安装方式(压缩包见文末资源链接),首先将压缩包解压到指定文件夹:
然后进入到目录中执行bash configure
:
稍等片刻可以在最后看到如下的输出信息(这里的nginx binary file
即为执行文件位置):
然后再在命令行执行make && make install
,再稍等片刻,这时便可以运行nginx
了:
/usr/local/nginx/sbin/nginx
然后执行以下命令开放80
端口:
systemctl start firewalld
firewall-cmd --zone=public --add-port=80/tcp --permanent
firewall-cmd --reload
然后查看本机ip
:
然后本机在浏览器测试:
MacOS
在MacOS
下和linux
安装的是同一个nginx-1.21.1
,整体步骤也类似,首先进行解压:
然后进入到目录中执行bash configure
:
不过这样直接执行在之后make
会出现权限问题,需要通过vim configure
进行些许修改:
# 创建一个目录代替原本的 /usr/local/nginx
mkdir bin
# 查看当前路径
pwd
vim configure
然后修改图示的位置为刚才创建的bin
目录的位置:
这时再执行bash configure
可以在最后看到如下的输出信息(这里的nginx binary file
即为执行文件位置):
然后再在命令行执行make && make install
,再稍等片刻,这时便可以运行nginx
了:
/Users/butterfly/file/develop/nginx-1.21.1/bin/sbin/nginx
然后查看本机ip
:
然后本机在浏览器测试:
端口配置
Nginx
默认运行端口为80
,如果想要修改,只需使用vim /usr/local/nginx/conf/nginx.conf
命令来修改server
内的listen
端口即可:
然后执行以下命令开放8888
端口:
systemctl start firewalld
firewall-cmd --zone=public --add-port=8888/tcp --permanent
firewall-cmd --reload
然后执行/usr/local/nginx/sbin/nginx -s reload
重启服务,并在本地浏览器进行测试:
如果想要同时开放多个端口访问,直接添加一个server
配置即可,例如下面配置开启了8081
和8082
端口:
server {
listen 8081;
server_name localhost;
location / {
root html;
index index.html index.htm;
}
}
server {
listen 8082;
server_name localhost;
location / {
root html;
index index.html index.htm;
}
}
然后执行/usr/local/nginx/sbin/nginx -s reload
重新加载配置,同时防火墙开启8081
和8082
端口,然后在本地测试:
默认情况下,nginx
访问的是nginx/html/
下的内容,所以如果有前端代码则可以选择放在html
目录下,如果想要自行选择文件的存放位置,也可以配置root
属性:
server {
listen 8081;
server_name localhost;
location / {
root /home/butterfly/demo;
index index.html index.htm;
}
}
这里配置root
路径为/home/butterfly/demo
,并且在路径下的index.html
文件内容如下:
然后执行/usr/local/nginx/sbin/nginx -s reload
重新加载配置,然后在本地测试:
此外,如果想要配置项目前缀,则只需要进行类似如下的配置,增加一个location
配置:
server {
listen 8081;
server_name localhost;
location / {
root /home/butterfly/demo;
index index.html index.htm;
}
location ^~ /demo {
alias /home/butterfly/demo;
try_files $uri $uri/ /demo/index.html;
}
# 等价如下配置
# location ^~ /demo {
# root /home/butterfly;
# try_files $uri $uri/ /demo/index.html;
# }
}
root
的处理结果是:root
路径+location
路径alias
的处理结果是:使用alias
路径替换location
路径
然后直接展示效果,访问时加上/demo
:
反向代理
既然讲Nginx
配置,那么肯定要展示下反向代理,首先使用springboot
写一个简单的测试接口:
@RestController
class HelloController {
@GetMapping("/hello")
fun hello() = "Hello, world!"
}
然后将打好的jar
包上传到linux
上并运行(默认为8080
端口)并测试:
# 后台运行
nohup java -jar hello-0.0.1-SNAPSHOT.jar &
# 测试接口
curl http://localhost:8080/hello
然后进行代理配置:
server {
# 监听 80 端口
listen 80;
server_name localhost;
location / {
# 转发到 8080 端口
proxy_pass http://localhost:8080;
}
}
然后记得防火墙开启80
端口,然后在本地进行测试:
配置HTTPS
在配置https
服务前需要先执行/usr/local/nginx/sbin/nginx -V
查看输出内容中有无configure arguments: –with-http_ssl_module
,如果没有则需要安装ssl
模块:
然后下载openssl
安装包:
https://www.openssl.org/source/openssl-1.1.1d.tar.gz
然后执行以下命令先新建一个临时目录,准备存放openssl
源代码包和临时的Nginx
:
mkdir tmp
cp nginx-1.21.1.tar.gz tmp/
cd tmp/
ls
得到以下输出:
然后解压这两个文件:
tar -zxvf nginx-1.21.1.tar.gz
tar -zxvf openssl-1.1.1d.tar.gz
然后编译nginx
:
# 这里的 --with-openssl 值根据自己存放 openssl 的路径而定
./configure --with-http_ssl_module --with-openssl=/home/butterfly/tmp/openssl-1.1.1d
# 不能加 make install 否则会覆盖编译过的 nginx
make
# 停止运行的 nginx
/usr/local/nginx/sbin/nginx -s stop
# 覆盖原有的文件
cp ./objs/nginx /usr/local/nginx/sbin/
# 再次查看安装状态
/usr/local/nginx/sbin/nginx -V
然后可以发现ssl
模块安装成功:
关于使用java
自带jdk
生成ssl
自签名证书的步骤可以查看这篇文章:nginx 配置自签名的ssl证书。
然后都存放在tmp
目录下:
然后修改nginx
的配置:
# 这里除了证书和密钥的配置位置需要修改外,其它均为 nginx 本身存在的配置,只需要去掉注释即可
server {
listen 443 ssl;
server_name localhost;
# 修改为自己证书文件和密钥的位置
ssl_certificate /home/butterfly/tmp/nginx.cer;
ssl_certificate_key /home/butterfly/tmp/nginx.key.unsecure;
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;
}
}
然后执行/usr/local/nginx/sbin/nginx -s reload
重新运行nginx
,防火墙开启443
端口后在本地浏览器进行测试: