Nginx 基本安装与配置(多平台)

550 阅读5分钟

前言

本文将介绍Nginx的基本安装及配置,并给出不同平台(WindowsLinuxMacOS)下的安装及配置方式。最后,本文所使用的Nginx版本文件可见文末的网盘链接或者通过官网链接自行选择下载。

Windows

windows上我安装的是nginx-1.21.1,并且采用压缩包安装方式(压缩包见文末资源链接),首先将压缩包解压到指定文件夹(这里位置可以自己选择其它位置,一般不建议系统盘,可能会出现权限问题,由于我使用的虚拟机环境测试,所以也就随意了):

image-20210718212019822

然后即可点击目录下的nginx.exe运行,双击后可以看到一个一闪而过的黑窗口,然后我们就可以在本机通过浏览器访问测试,在此之前,先看一下ip地址:

image-20210717190547383

然后在浏览器访问测试(Nginx默认启动端口为80):

image-20210718212252482

如果想要关闭,则可以在任务任务管理器中选择关闭,或者在安装目录下执行nginx.exe -s stop命令即可。

image-20210718212935001

Linux

Linux上我安装的是nginx-1.21.1,并且采用压缩包安装方式(压缩包见文末资源链接),首先将压缩包解压到指定文件夹:

image-20210718213657110

然后进入到目录中执行bash configure

image-20210718214216984

稍等片刻可以在最后看到如下的输出信息(这里的nginx binary file即为执行文件位置):

image-20210718214355805

然后再在命令行执行make && make install,再稍等片刻,这时便可以运行nginx了:

image-20210718214857556

/usr/local/nginx/sbin/nginx

然后执行以下命令开放80端口:

systemctl start firewalld
firewall-cmd --zone=public --add-port=80/tcp --permanent
firewall-cmd --reload

然后查看本机ip

image-20210711164014098

然后本机在浏览器测试:

image-20210718214939292

MacOS

MacOS下和linux安装的是同一个nginx-1.21.1,整体步骤也类似,首先进行解压:

image-20210718215529382

然后进入到目录中执行bash configure

image-20210718215746481

不过这样直接执行在之后make会出现权限问题,需要通过vim configure进行些许修改:

# 创建一个目录代替原本的 /usr/local/nginx
mkdir bin
# 查看当前路径
pwd
vim configure

然后修改图示的位置为刚才创建的bin目录的位置:

image-20210718221300486

这时再执行bash configure可以在最后看到如下的输出信息(这里的nginx binary file即为执行文件位置):

image-20210718221406982

然后再在命令行执行make && make install,再稍等片刻,这时便可以运行nginx了:

image-20210718221523256

/Users/butterfly/file/develop/nginx-1.21.1/bin/sbin/nginx

然后查看本机ip

image-20210718221547988

然后本机在浏览器测试:

image-20210718221648493

端口配置

Nginx默认运行端口为80,如果想要修改,只需使用vim /usr/local/nginx/conf/nginx.conf命令来修改server内的listen端口即可:

image-20210725194926946

然后执行以下命令开放8888端口:

systemctl start firewalld
firewall-cmd --zone=public --add-port=8888/tcp --permanent
firewall-cmd --reload

然后执行/usr/local/nginx/sbin/nginx -s reload重启服务,并在本地浏览器进行测试:

image-20210725195611899

如果想要同时开放多个端口访问,直接添加一个server配置即可,例如下面配置开启了80818082端口:

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重新加载配置,同时防火墙开启80818082端口,然后在本地测试:

image-20210725211501751

默认情况下,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文件内容如下:

image-20210725212407879

然后执行/usr/local/nginx/sbin/nginx -s reload重新加载配置,然后在本地测试:

image-20210725212432061

此外,如果想要配置项目前缀,则只需要进行类似如下的配置,增加一个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

image-20210725214022099

反向代理

既然讲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

image-20210725220951537

然后进行代理配置:

server {
    # 监听 80 端口
    listen       80;
    server_name  localhost;
    location / {
        # 转发到 8080 端口
        proxy_pass http://localhost:8080;
    }
}

然后记得防火墙开启80端口,然后在本地进行测试:

image-20210725222332029

配置HTTPS

在配置https服务前需要先执行/usr/local/nginx/sbin/nginx -V查看输出内容中有无configure arguments: –with-http_ssl_module,如果没有则需要安装ssl模块:

image-20210726084304518

然后下载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

得到以下输出:

image-20210726085414565

然后解压这两个文件:

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模块安装成功:

image-20210726090339002

关于使用java自带jdk生成ssl自签名证书的步骤可以查看这篇文章:nginx 配置自签名的ssl证书

然后都存放在tmp目录下:

image-20210726094914341

然后修改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端口后在本地浏览器进行测试:

image-20210726095301149

资源链接

链接:pan.baidu.com/s/17PmvmZrU… 提取码:asku

windows官网链接:nginx.org/download/ng…

linux & mac官网链接:nginx.org/download/ng…