怎样在Ubuntu上安装Nginx

2020年1月7日 | 分类: 【技术】

【依赖】

ubuntu下安装nginx时依赖库zlib,pcre,openssl安装方法

参考:https://blog.csdn.net/z920954494/article/details/52132125

首先使用dpkg命令查看自己需要的软件是否安装。

例如查看zlib是否安装:

dpkg -l | grep zlib

安装 openssl :

apt-get install openssl libssl-dev

安装 pcre :

apt-get install libpcre3 libpcre3-dev

安装 zlib :

apt-get install zlib1g-dev

安装 libxml2 :

apt-get install libxml2 libxml2-dev

安装 bison :

apt-get install bison

【编译】

下载解压 Nginx 源码包 :

下载:http://nginx.org/download/

cd /root && wget http://nginx.org/download/nginx-1.17.9.tar.gz && tar zxf nginx-1.17.9.tar.gz

配置 Nginx 支持 HTTP/2 :

参考:https://amon.org/nginx-http2

1. 在编译 Nginx时加入 –with-http_v2_module
2. nginx.conf 中设置:listen 443 ssl http2;

下载解压 OpenSSL 源码包:

参考:https://amon.org/openssl

查看当前 OpenSSL 版本:

openssl version

输出:

OpenSSL 1.1.1  11 Sep 2018

下载解压 OpenSSL 1.1.1d 源码包 :

cd /root/nginx-1.17.9 && wget https://www.openssl.org/source/openssl-1.1.1d.tar.gz && tar zxvf openssl-1.1.1d.tar.gz

添加 nginx 用户组 和 用户 nginx :

/usr/sbin/groupadd -f nginx && /usr/sbin/useradd -g nginx nginx

下载 Nginx cache purge 源码包 :

参考:https://amon.org/ngx_cache_purge

cd /root/nginx-1.17.9 && wget http://labs.frickle.com/files/ngx_cache_purge-2.3.tar.gz && tar zxf ngx_cache_purge-2.3.tar.gz

下载 modsecurity 源码包 :

先编译 libmodsecurity 。

参考:https://amon.org/modsecurity

下载源码到 nginx 源代码目录:

cd /root/nginx-1.17.9 && git clone --depth 1 https://github.com/SpiderLabs/ModSecurity-nginx.git

安装 headers-more 模块 :

参考:https://amon.org/ngx_http_headers_more_filter_module

下载源码到 nginx 源代码目录:

cd /root/nginx-1.17.9 && git clone --depth 1 https://github.com/openresty/headers-more-nginx-module.git

编译安装 Nginx :

cd /root/nginx-1.17.9 && ./configure --prefix=/usr/local/nginx --user=nginx --group=nginx --with-http_stub_status_module --with-http_ssl_module --with-http_gzip_static_module --with-http_v2_module  --with-openssl=./openssl-1.1.1d  --add-module=./ngx_cache_purge-2.3 --add-dynamic-module=./headers-more-nginx-module --add-dynamic-module=./ModSecurity-nginx
make && make install

检查 Nginx 版本:

/usr/local/nginx/sbin/nginx -V

输出:

nginx version: nginx/1.17.9
built by gcc 7.5.0 (Ubuntu 7.5.0-3ubuntu1~18.04)
built with OpenSSL 1.1.1d  10 Sep 2019
TLS SNI support enabled
configure arguments: --prefix=/usr/local/nginx --user=nginx --group=nginx --with-http_stub_status_module --with-http_ssl_module --with-http_gzip_static_module --with-http_v2_module --with-openssl=./openssl-1.1.1d --add-module=./ngx_cache_purge-2.3 --add-dynamic-module=./headers-more-nginx-module --add-dynamic-module=./ModSecurity-nginx

可以看到 TLS SNI support 已经启用。

在系统服务目录里创建nginx.service文件:

参考:https://blog.csdn.net/weixin_41960571/article/details/81158095
参考:https://stackoverflow.com/questions/56528305/failed-to-start-nginx-service-unit-not-found

文件路径:/lib/systemd/system/nginx.service

[Unit]
Description=nginx
After=network.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 quit
PrivateTmp=true
 
[Install]
WantedBy=multi-user.target

设置开机启动:

systemctl enable nginx.service

输出:

Created symlink /etc/systemd/system/multi-user.target.wants/nginx.service → /lib/systemd/system/nginx.service.

启动nginx服务

systemctl start nginx.service

查看服务当前状态

systemctl status nginx.service

重新启动服务

systemctl restart nginx.service

查看所有已启动的服务

systemctl list-units --type=service

通过 Let’s Encrypt 生成 Wildcard 证书 :

参考:http://amon.org/le

cd /root && wget https://dl.eff.org/certbot-auto && chmod a+x certbot-auto
./certbot-auto --server https://acme-v02.api.letsencrypt.org/directory -d stripe.wiki -d "*.stripe.wiki" --manual --preferred-challenges dns-01 certonly
./certbot-auto renew

生成证书相关文件路径:
/etc/letsencrypt/live/stripe.wiki/fullchain.pem
/etc/letsencrypt/live/stripe.wiki/privkey.pem

配置 Nginx 应用服务器:

配置路径:/usr/local/nginx/conf/nginx.conf

参考:https://amon.org/nginx-conf

源码路径:/usr/local/nginx/html

添加 nginx 对程序目录有执行权限:

chown -R nginx:nginx /usr/local/nginx/html

启动 Nginx :

/usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf

如果有修改配置文件,先检查正确性:

/usr/local/nginx/sbin/nginx -t

重启 Nginx :

/usr/local/nginx/sbin/nginx -s reload

在浏览器中打开:https://stripe.wiki/ ,发现http正常跳转到https,而且支持h2。

设置nginx开机自启动:

参考:https://amon.org/nginx-init

Nginx服务设置:dos2unix 转换/设置执行权限/注册成服务/设置开机启动

dos2unix /etc/init.d/nginx && chmod a+x /etc/init.d/nginx && chkconfig --add nginx && chkconfig nginx on

查看版本:

nginx -v

输出:

nginx version: nginx/1.17.9

【测试】

查看端口:

netstat -tulpn | grep nginx

输出:

tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN      11351/nginx: master

是否可以访问网站,然鹅不能,是因为 firewalld 需要进一步设置,先关闭:

service firewalld stop

然后在浏览器中访问 IP :

Welcome to nginx!

配置文件目录:/etc/nginx/
日志文件目录:/var/log/nginx/

主配置文件:/etc/nginx/nginx.conf

然鹅如果需要添加模块,依然需要编译,因此不如完全使用编译模式。

设置nginx开机自启动:

参考:https://www.cnblogs.com/dtiove/p/5924385.html

Nginx服务设置:dos2unix 转换/设置执行权限/注册成服务/设置开机启动

apt install dos2unix
dos2unix /etc/init.d/nginx && chmod a+x /etc/init.d/nginx && sysv-rc-conf nginx on && systemctl enable nginx