本文主要记录如何在 Linux 中安装 Nginx。
1. 下载 Nginx
官网链接:nginx: download
选择你需要的版本即可,这里我下载的是 1.18.0
版本的。
2. 上传并解压
下载下来后使用 ftp 工具将压缩包上传到服务器的指定目录下并解压:
# 切换到你刚才上传的 nginx 所在目录下
cd /usr/local/environment/nginx
# 解压
tar -zxvf nginx-1.18.0.tar.gz
3. 安装 nginx 所需要的环境
# openssl 和 openssl-devel 是使用 nginx 配置 SSL 时需要用到的依赖
# 如果不需要配置 SSL 则可以不安装这两个依赖
yum -y install gcc pcre-devel zlib-devel openssl openssl-devel
4. nginx 初始化
解压完成后还是无法启动的,我们下载的是源码,需要自己编译打包,生成一个 sbin
目录。
首先切换到我们解压出来的 nginx 目录中,并执行以下命令进行初始化:
cd /usr/local/env/nginx/nginx-1.18.0/
# --prefix 后面的路径是指定 sbin 目录生成的位置
# 如果需要支持 https 访问网站,则前面需要安装 openssl 和 openssl-devel 依赖
# 并在这里加上 --with-http_ssl_module 参数进行初始化
./configure --prefix=/usr/local/environment/nginx/nginx-1.18.0 --with-http_ssl_module
make
make install
如果一切顺利的话就会在你刚刚指定的路径下生成一个 sbin
目录,里面存放着一个名字叫做 nginx
的文件。这个文件就是 nginx 的启动文件。
5. 启动 nginx
进入到 sbin
目录下,使用指定 nginx 配置文件的方式启动:
cd /usr/local/env/nginx/nginx-1.18.0/sbin/
# -c 表示指定配置文件
./nginx -c /usr/local/env/nginx/nginx-1.18.0/conf/nginx.conf
上面启动可能会报没有 /usr/local/env/nginx/nginx-1.18.0/logs/access.log
和 /usr/local/env/nginx/nginx-1.18.0/logs/error.log
的错。只需要自己手动创建以下这两个文件即可。
cd /usr/local/env/nginx/nginx-1.18.0/
mkdir logs
cd logs
touch access.log
touch error.log
然后再重新启动 nginx 应该就不会报错了。
nginx 默认的配置监听的是 80 端口,因此我们打开浏览器访问 http://服务器 IP
,如果看见 Welcome to Nginx !
的欢迎页面则表示我们 Nginx 安装成功了。
6. 配置 SSL
首先需要准备 SSL 证书,可以自签也可以使用各云服务厂商提供的免费证书。我这里使用的是阿里云免费的 SSL 证书。
在阿里云下载 Nginx 用的证书后,解压出来会有两个文件,一个后缀名为 .key
和一个后缀名为 .pem
的文件。
6.1. 上传证书
cd /usr/local/env/nginx/nginx-1.18.0/conf
# 新建一个名字叫做 cert 的目录用于存放证书
mkdir cert
使用 ftp 将刚才下载的两个文件上传至刚建好的 cert 目录下,然后回到 conf
目录下,先备份一份默认的 nginx 配置文件,避免后续把配置文件改坏了没法恢复。
cp /usr/local/env/nginx/nginx-1.18.0/conf/nginx.conf /usr/local/env/nginx/nginx-1.18.0/conf/nginx.conf.bak
6.2. 修改 nginx.conf 文件
vim /usr/local/env/nginx/nginx-1.18.0/conf/nginx.conf
6.2.1. 配置 SSL 和反向代理
增加一个 server 段,如下,直接拷贝到配置文件末尾中:
server {
listen 443 ssl;
server_name 你的域名或者你的 ip 地址;
ssl_certificate /usr/local/env/nginx/nginx-1.18.0/conf/cert/你的 pem 文件名字.pem;
ssl_certificate_key /usr/local/env/nginx/nginx-1.18.0/conf/cert/你的 key 文件名字.key;
ssl_session_timeout 5m;
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
ssl_protocols TLSv1.1 TLSv1.2 TLSv1.3;
ssl_prefer_server_ciphers on;
# 代理路径
location / {
# web 网站程序存放目录
root html;
index index.html index.htm;
# 如果需要配置反向代理,以 Java + SpringBoot 项目为例,跳转到 8088 端口
proxy_pass http://localhost:8088;
}
# 注意,SpringBoot 项目很有可能导致项目的静态资源(图片、css、js)被拦截
# 因此还需要配置静态资源的反向代理
# 这里的图片后缀自行添加、删除
location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$
{
# 解决反向代理无法访问图片的问题,和程序代理路径保持一致
proxy_pass http://localhost:8088;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
# 过期时间自己视情况修改
expires 30d;
}
location ~ .*\.(js|css)?$
{
# 解决反向代理无法访问 js,css 的问题,和程序代理路径保持一致
proxy_pass http://localhost:8088;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
# 过期时间自己视情况修改
expires 12h;
}
}
然后回到 sbin
目录下指定配置文件重启 nginx:
cd /usr/local/env/nginx/nginx-1.18.0/sbin/
# 指定配置文件重启 nginx
./nginx -s reload -c /usr/local/env/nginx/nginx-1.18.0/conf/nginx.conf
然后打开浏览器输入 https://你的服务器 IP 或者域名
,如果依旧可以看到欢迎页面则表示 SSL 配置成功了。
6.2.2. 配置 HTTP 跳转 HTTPS
继续编辑 nginx.conf 文件:
vim /usr/local/env/nginx/nginx-1.18.0/conf/nginx.conf
找到 server { listen 80 ......}
这一段配置文件,修改或新增如下的部分配置:
server {
listen 80;
server_name 你的域名或者 IP 地址;
# 将所有 HTTP 请求通过 rewrite 指令重定向到 HTTPS
rewrite ^(.*)$ https://$host$1;
}
然后保存配置文件和上面一样指定配置文件重新启动 nginx 即可。这样 http
开头的请求也会直接被重定向到 https
了。
2 条评论
现在我感觉nginx好像可以在线安装,这个蛮快的,然后配置https的话可以有Certbot也很快,另外装了1panel面板之后,可能还有更便捷的图形化界面,不过现在还是原生的nginx用得更多。
大学时候用过宝塔面板,图形化操作很简单。这篇文章是以前记录的一系列服务器环境配置的记录之一,采用最原始的安装、配置方式也是为了对相关操作有更深的认识。