Nginx (engine x) 是一个高性能的HTTP和反向代理web服务器,同时也提供了IMAP/POP3/SMTP服务。Nginx是由伊戈尔·赛索耶夫为俄罗斯访问量第二的Rambler.ru站点(俄文:Рамблер)开发的。其特点是占有内存少,并发能力强,事实上nginx的并发能力在同类型的网页服务器中表现很好。

1. 安装nginx

nginx是最常用的反向代理代理服务器,现在就让nginx为我们做反向代理吧。我们可以通过centosyum安装,也可以自己编译安装,或者也可以通过本地rpm安装。如果对版本没有什么要求,还是推荐yum安装,很简单无需过多的配置。

1.1 yum安装nginx

#搜索nginx 两种方式都可行
yum search nginx --showduplicates
yum list nginx --showduplicates

#安装指定版本,不指定版本直接yum install -y nginx即可
yum install -y  nginx-all-modules-1.16.1-3.el7.noarch

#查看nginx是否安装完成
nginx -v

1.2 rpm包安装nginx

yumnginx包一般跟随系统版本变化,有时候可能yum中没有我们想要的版本,我们可以使用rpm包进行安装。首先我们需要去网上下载一个rpm包(rpm包下载),找到我们想要的版本然后下载下来。例如下载 nginx-all-modules-1.16.1-3.el7 及相关安装依赖包。

#以下是nginx全模块包及其依赖
#nginx-1.16.1-3.el7.x86_64.rpm
#nginx-all-modules-1.16.1-3.el7.noarch.rpm
#nginx-filesystem-1.16.1-3.el7.noarch.rpm
#nginx-mod-http-image-filter-1.16.1-3.el7.x86_64.rpm
#nginx-mod-http-perl-1.16.1-3.el7.x86_64.rpm
#nginx-mod-http-xslt-filter-1.16.1-3.el7.x86_64.rpm
#nginx-mod-mail-1.16.1-3.el7.x86_64.rpm
#nginx-mod-stream-1.16.1-3.el7.x86_64.rpm
#将上述安装包放入创建的nginx文件夹中
mkdir -p /opt/package/nginx

#进入nginx文件夹
cd /opt/package/nginx

#yum本地安装所有安装包
yum localinstall *

#查看nginx是否安装完成
nginx -v

1.3 手动编译安装nginx

首先我们先安装nginx的依赖。

yum install -y gcc-c++

yum install -y pcre pcre-devel

yum install -y zlib zlib-devel

yum install -y openssl openssl-devel

然后我们可以去nginx 官网下载安装包,将下载好的文件放到 /usr/local/nginx或者你想放置的目录

1.3.1 解压

#解压
tar zxf nginx-1.16.1.tar.gz

1.3.2 编译

#进入解压后的文件,编译安装 运行./configure
./configure  #./configure --prefix=/usr/local/nginx

#编译并安装
make && make install 
#编译安装之后出现make[1]: Leaving directory '/usr/local/nginx/nginx-1.16.1' 表示编译成功

1.3.3 测试启动nginx

#cd到刚才配置的安装目录/usr/loca/nginx/ 测试是否安装成功
./sbin/nginx -t

#启动nginx
cd /usr/local/nginx/sbin
./nginx

#查看nginx进程号
ps aux | grep nginx

#杀掉nginx
kill -9 <进程号>

1.3.4 配置nginx环境变量

#配置环境变量
vim /etc/profile
#配置nginx的环境变量
PATH=$PATH:/usr/local/nginx/sbin
export PATH
#生效
source /etc/profile

1.3.5 建立service启动文件

#建立服务文件,并进入编辑
vim /lib/systemd/system/nginx.service 
[Unit]
Description=nginx - high performance web server
After=network.target remote-fs.target nss-lookup.target

[Service]
Type=forking
ExecStart=/usr/local/nginx/sbin/nginx
ExecReload=/usr/local/nginx/sbin/nginx -s reload
ExecStop=/usr/local/nginx/sbin/nginx -s stop
#PrivateTmp=True

[Install] 
WantedBy=multi-user.target
#重载守护进程,使文件生效
systemctl daemon-reload

1.4 启动nginx

安装成功后,启动nginx,其实我们只需要执行最后一个命令即可完成对nginx的启动和设置自启。

#启动nginx
systemctl start nginx

#停止nginx
systemctl stop nginx

#nginx开启自启
systemctl enable nginx

#启动nginx并开启自启
systemctl enable nginx --now

2. 配置nginx

nginx的配置文件放在/etc/nginx/目录下,我们进入该目录,发现目录有很多文件,我们只需要关注nginx.conf文件即可。
nginx配置目录

我们打开nginx.conf文件,将里面的server{ }块注释掉,因为我们将要配置我们自己的server

#    server {
#        listen       80;
#        listen       [::]:80;
#        server_name  _;
#        root         /usr/share/nginx/html;

#        # Load configuration files for the default server block.
#        include /etc/nginx/default.d/*.conf;
#
#        error_page 404 /404.html;
#        location = /404.html {
#        }
#
#        error_page 500 502 503 504 /50x.html;
#        location = /50x.html {
#        }
#    }

现在我们先到/etc/nginx/con.d/目录中,新建domain.conf(替换你自己的域名或者其他你想要的名称),这将是我们建立的第一个nginx配置文件。下面是配置文件,根据自己的需要进行配置即可。

#配置80端口
server {
        listen       80 default_server; #默认服务器,如果http匹配不上都会到这里来
        listen       [::]:80 default_server;
        server_name  domain.com; #你的域名
        root         /usr/share/nginx/html; #nginx的静态文件目录

        # Load configuration files for the default server block.
        include /etc/nginx/default.d/*.conf;

        # certbot用来申请免费证书用
        location ~ /.well-known {
            root /usr/share/nginx;
            allow all;
        }

		#将http转到https
        rewrite ^(.*)$ https://$host$1 permanent;


    }

#配置443端口
server {
        listen       443 ssl;
        listen       [::]:443 ssl;
        server_name  domain.com; #你的域名
        root         /usr/share/nginx/html; #nginx的静态文件目录

		#这里是你的证书
        ssl_certificate /etc/letsencrypt/live/domain.com/fullchain.pem;
        ssl_certificate_key /etc/letsencrypt/live/domain.com/privkey.pem;
        
        ssl_protocols TLSv1.1 TLSv1.2 TLSv1.3; #TLS版本,我们可以都开启,也可以按需配置
        ssl_session_cache shared:MozSSL:10m;
        ssl_session_timeout  5m; #会话过期时间5分钟
        ssl_session_tickets off; #会话票证,开启能节省TLS握手开销
        ssl_ciphers HIGH:!aNULL:!MD5; #nginx初始加密
        ssl_prefer_server_ciphers off; #如果开启,在TLS握手时启用服务器算法优先,由服务器选择适配算法而非客户端选择
        
        #keepalive_timeout 60;    #保持连接超时时间60分

        # 包含其他的配置文件
        include /etc/nginx/default.d/*.conf;

		# 同样是certbot用来申请免费证书用
        location ~ /.well-known {
            root /usr/share/nginx;
            allow all;
        }


		#这里可以配置自己的服务,让nginx反向代理你的服务


		# 404页面
		error_page 404 /404.html;
			location = /40x.html {
		}

		# 服务器错误的页面
		error_page 500 502 503 504 /50x.html;
			location = /50x.html {
		}
}

设置完domain.config后我们退出保存,现在就运行命令让nginx生效。

#检查nginx配置文件语法是否正确
nginx -t

#重载nginx,让配置文件生效
nginx -s reload

现在我们访问domain.com,应该会出现Welcome to CentOS页面,因为我们设置了nginx静态文件的目录,它会访问nginxindex.html文件
Welcome to CentOS

3. 防火墙放行

虽然我们已经将nginx的配置完成了,但我们依然需要配置[[防火墙]]才可以外部访问,如果是阿里云vps或腾讯云可以配置安全组以放行nginx 代理的80端口443端口

#开放80和443端口 
#zone=public代表公开空间 外部可访问
# --permanent表示永久有效
firewall-cmd --zone=public --add-port=80/tcp --permanent
firewall-cmd --zone=public --add-port=443/tcp --permanent

#重载防火墙
firewall-cmd --reload

#查看开放的防火墙
firewall-cmd --zone=public --list-ports

4. 申请TLS证书

申请证书我们可以使用免费的certbot来进行申请,certbot使用的是Let's Encrypt。之前,我们已经给nginx配置了location ~ /.well-known的代理,certbot需要这个路径进行证书申请。

#先安装cerbot
yum install cerbot

#查看certbo的版本,也可以用来验证是否安装成功
certbot --version

#申请正式
#将xxx@email.com换成自己的邮箱
#将domain.com换成自己的域名
#-w /usr/share/nginx/指定的是nginx的文件目录,如果跟我一样自己装的nginx,无需更改
certbot certonly --webroot --agree-tos -v -t --email xxx@email.com -w /usr/share/nginx/ -d domain.com

如果出现Congratulations说明申请成功,同时会附上域名证书的路径,这个路径就是我们配置nginx证书位置填的路径。

/etc/letsencrypt/live/domain.com/fullchain.pem
/etc/letsencrypt/live/domain.com/privkey.pem
  • nginxssl_certificate配置fullchain.pem
  • nginxssl_certificate_key配置privkey.pem

5. 自动续签TLS证书

certbot申请的证书一般只有2-3个月的有效期,过了有效期就需要进行续签。那么怎么才能自动续签呢。我们可以使用cron定时任务来自动运行certbot进行续签。

#配置cron定时任务,以下命令打开cron的配置文件
crontab -e

添加一个cron定时任务

# 设置每天的0点钟进行续签, post-hook是续签完成之后操作的命令
0 0 * * * certbot renew --post-hook "/usr/sbin/nginx -s reload"

网上有些人说需要重启nginx,但我认为nginx -s reload重载命令就是为了重新生效配置文件,停止nginx意味着网站都不能打开了,一般在生产环境是不可能去停止nginx的。不过我还没有到续签的时候,所以也还没有成功过,如果有成功的经验,欢迎分享。 自动续签已经持续一年多,很稳定。

文章作者: Willxup
本文链接:
版权声明: 本站所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Willxup
Linux Linux CentOS Nginx
喜欢就支持一下吧