Linux----Nginx安装配置

1. Nginx下载

1.1 官方网址

# Nginx官网
http://nginx.org/


# 推荐:下载地址
http://nginx.org/download/nginx-1.20.2.tar.gz

1.2 安装Nginx

1. 进入到usr中的src,把刚才下载的安装包拉进去

cd /usr/src/

2. 解压安装包

tar zxvf nginx-1.6.2.tar.gz

3. 进入安装包目录

cd nginx-1.6.2

4. 编译安装

./configure

make && make install

5. 在编译安装可能遇到的问题

在输入**./configure**后报错:最后一行会出现

configure: error: You need a C++ compiler for C++ support.
1
此时需要执行以下命令:

yum install -y gcc gcc-c++

1.3 完整HTTP--Nginx配置

user root;         ############user www-data; 否则nginx没有权限访问静态资源文件
worker_processes auto;
pid /run/nginx.pid;
include /etc/nginx/modules-enabled/*.conf;

events {
        worker_connections 1024;
        # multi_accept on;
}

http {
        sendfile on;
        tcp_nopush on;
        types_hash_max_size 2048;
        default_type application/octet-stream;
        include /etc/nginx/mime.types;

        access_log /var/log/nginx/access.log;
        error_log /var/log/nginx/error.log;

        gzip on;
        include /etc/nginx/conf.d/*.conf;
        #include /etc/nginx/sites-enabled/*; #######################此文件为nginx默认的监听80端口的文件,给注释掉 ,否则访问网站时不会把消息转发给下方配置的uwsgi端口
        #######################以下为增加的内容##############
        server {
                listen        80 default_server;    #监听80端口
                server_name        Homeowner;
                charset      utf-8;

                client_max_body_size 75M;

                location / {
                        include   uwsgi_params;
                        uwsgi_pass     10.0.16.15:8888;  #将信息转发给8080端口的uwsgi,和uwsgi.ini配置文件中的端口需要保持一致
                        uwsgi_read_timeout    600;
                        uwsgi_send_timeout    600;
                        uwsgi_connect_timeout 600;
                }


                #路径为/static的请求,直接从根目录的static文件夹中获取静态文件
                location ~/static/ {
                        root /usr/local/nginx/html;
                }



                #路径为/media 的请求直接从根目录的media文件夹中获取静态文件(指django媒体文件-media)
                #location /img {
                #       alias /root/www/homeowner/Homeowner/HomeownerEnv/lib/python3.11/site-packages/django/contrib/admin/static/img;
                #}
        }
}

1.4 常用命令

1. 启动

cd /usr/local/nginx/sbin/nginx

2. 停止

/usr/local/nginx/sbin/nginx -s stop

3. 重启

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

4. 查看版本及GCC及模块

/usr/local/nginx/sbin/nginx t

5. 配置文件预检测

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

2. SSL证书配置部署

2.1 确认开启443端口

2.2 下载证书文件

1. 腾讯SSL证书管理页面

https://console.cloud.tencent.com/ssl

2. 确认信息后,点击下载

3. 文件夹中包含4个文件

``cloud.tencent.com_bundle.crt 证书文件

``cloud.tencent.com_bundle.pem 证书文件(可忽略该文件)

``cloud.tencent.com.key 私钥文件

``cloud.tencent.com.csr CSR 文件

image-20231120213245013

2.3 上传文件到Nginx目录

将已获取到的 cloud.tencent.com_bundle.crt证书文件和cloud.tencent.com.key私钥文件从本地目录拷贝到 Nginx 服务器的 /etc/nginx 目录(此处为 Nginx 默认安装目录,请根据实际情况操作)下

2.4 修改配置文件

找到Nginx的配置文件,如果找不到可以执行下面命令

nginx -t

编辑文件

vim /usr/loacl/nginx/conf/nginx.conf

Nginx 版本为 nginx/1.15.0 以上请使用 listen 443 ssl 代替 listen 443ssl on

server {
     #SSL 默认访问端口号为 443
     listen 443 ssl; 
     #请填写绑定证书的域名
     server_name cloud.tencent.com; 
     #请填写证书文件的相对路径或绝对路径
     ssl_certificate cloud.tencent.com_bundle.crt; 
     #请填写私钥文件的相对路径或绝对路径
     ssl_certificate_key cloud.tencent.com.key; 
     ssl_session_timeout 5m;
     #请按照以下协议配置
     ssl_protocols TLSv1.2 TLSv1.3; 
     #请按照以下套件配置,配置加密套件,写法遵循 openssl 标准。
     ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE; 
     ssl_prefer_server_ciphers on;
     location / {
         #网站主页路径。此路径仅供参考,具体请您按照实际目录操作。
         #例如,您的网站主页在 Nginx 服务器的 /etc/www 目录下,则请修改 root 后面的 html 为 /etc/www。
         root html; 
         index  index.html index.htm;
     }
 }

执行命令,验证配置文件问题

nginx -t

重新加载Nginx

../sbin/nginx -s reload

重载成功,即可使用 https://cloud.tencent.com 进行访问。

2.5 HTTP自动跳转HTTPS的安全配置(可选)

2.5.1 五种跳转方法介绍

如果您需要将 HTTP 请求自动重定向到 HTTPS。您可以通过以下操作设置(任选一):

  1. 根据实际需求,选择以下配置方式:

  2. 在页面中添加 JS 脚本。

  3. 在后端程序中添加重定向。

  4. 通过 Web 服务器实现跳转。

  5. Nginx 支持 rewrite 功能。若您在编译时没有去掉 pcre,您可在 HTTP 的 server 中增加 return 301 https://$host$request_uri;,即可将默认80端口的请求重定向为 HTTPS。修改如下内容:

2.5.2 Nginx安全配置

未添加注释的配置语句,按照下述配置即可。

由于版本问题,配置文件可能存在不同的写法。例如:Nginx 版本为 nginx/1.15.0 以上请使用 listen 443 ssl 代替 listen 443ssl on

1. 修改配置文件

server {
     #SSL 默认访问端口号为 443
     listen 443 ssl;
     #请填写绑定证书的域名
     server_name cloud.tencent.com; 
     #请填写证书文件的相对路径或绝对路径
     ssl_certificate  cloud.tencent.com_bundle.crt; 
     #请填写私钥文件的相对路径或绝对路径
     ssl_certificate_key cloud.tencent.com.key; 
     ssl_session_timeout 5m;
     #请按照以下套件配置,配置加密套件,写法遵循 openssl 标准。
     ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
     #请按照以下协议配置
     ssl_protocols TLSv1.2 TLSv1.3;
     ssl_prefer_server_ciphers on;
     location / {
       #网站主页路径。此路径仅供参考,具体请您按照实际目录操作。 
       #例如,您的网站主页在 Nginx 服务器的 /etc/www 目录下,则请修改 root 后面的 html 为 /etc/www。
       root html;
       index index.html index.htm;
     }
}

# HTTP 自动跳转 HTTPS的安全配置
server {
 	listen 80;
 	#请填写绑定证书的域名
 	server_name cloud.tencent.com; 
 	#把http的域名请求转成https
 	return 301 https://$host$request_uri; 
}

2. 验证配置文件问题

nginx -t

3. 重载Nginx

../sbin/nginx -s reload

2.6 完整HTTPS--Nginx配置

user root;         ############user www-data; 否则nginx没有权限访问静态资源文件
worker_processes auto;
pid /run/nginx.pid;
include /etc/nginx/modules-enabled/*.conf;

events {
        worker_connections 1024;
        # multi_accept on;
}

http {
        sendfile on;
        tcp_nopush on;
        types_hash_max_size 2048;
        default_type application/octet-stream;
        include /etc/nginx/mime.types;

        access_log /var/log/nginx/access.log;
        error_log /var/log/nginx/error.log;

        gzip on;
        include /etc/nginx/conf.d/*.conf;
        #include /etc/nginx/sites-enabled/*; #######################此文件为nginx默认的监听80端口的文件,给注释掉 ,否则访问网站时不会把消息转发给下方配置的uwsgi端口
        #######################以下为增加的内容##############
        server {
                listen        443 ssl;    #监听80端口
                server_name        aicx365.com;
                ssl_certificate /usr/local/nginx/aicx365.com_nginx/aicx365.com_bundle.crt;
                ssl_certificate_key /usr/local/nginx/aicx365.com_nginx/aicx365.com.key;
                ssl_session_timeout 5m;
                ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
                ssl_protocols TLSv1.2 TLSv1.3;
                ssl_prefer_server_ciphers on;
                charset      utf-8;

                client_max_body_size 75M;

                location / {
                        include   uwsgi_params;
                        uwsgi_pass     10.0.16.15:8888;  #将信息转发给8080端口的uwsgi,和uwsgi.ini配置文件中的端口需要保持一致
                        uwsgi_read_timeout    600;
                        uwsgi_send_timeout    600;
                        uwsgi_connect_timeout 600;
                }


                #路径为/static的请求,直接从根目录的static文件夹中获取静态文件
                location ~/static/ {
                        root /usr/local/nginx/html;
                }



                #路径为/media 的请求直接从根目录的media文件夹中获取静态文件(指django媒体文件-media)
                #location /img {
                #       alias /root/www/homeowner/Homeowner/HomeownerEnv/lib/python3.11/site-packages/django/contrib/admin/static/img;
                #}
        }

        server {
                listen 80;
                #请填写绑定证书的域名
                server_name aicx365.com;
                #把http的域名请求转成https
                return 301 https://$host$request_uri;
        }

}

3. 报错处理

6.1 Nginx 1.2.1不显示svg图片

1. 首先安装编译工具及库文件

yum -y install make zlib zlib-devel gcc-c++ libtool  openssl openssl-devel

2. 安装 PCRE

2.1 下载

PCRE 作用是让 Nginx 支持 Rewrite 功能。

http://downloads.sourceforge.net/project/pcre/pcre/8.35/pcre-8.35.tar.gz

进入到usr中的src,把刚才下载的安装包拉进去

cd /usr/src/

2.2 解压安装包

tar zxvf pcre-8.35.tar.gz

2.3 进入安装包目录

cd pcre-8.35

2.4 编译安装

./configure

make && make install

2.5 查看pcre版本

 pcre-config --versio

3. 安装 Nginx1.6.2,可以根据上面Nginx下载中,直接下载1.20.2

3.1 下载Nginx

# Nginx官网
http://nginx.org/


# 推荐:下载地址
http://nginx.org/download/nginx-1.6.2.tar.gz

进入到usr中的src,把刚才下载的安装包拉进去

cd /usr/src/

3.2 解压安装包

tar zxvf nginx-1.6.2.tar.gz

3.3 进入安装包目录

cd nginx-1.6.2

3.4 编译安装

./configure

make && make install

4. 在编译安装可能遇到的问题

在输入**./configure**后报错:
最后一行会出现

configure: error: You need a C++ compiler for C++ support.
1
此时需要执行以下命令:

yum install -y gcc gcc-c++

5. 将mime.types 拷贝到 /etc/nginx/

cd /etc/

mkdir nginx

cp /usr/src/conf/mime.types ./nginx/

6.1 Nginx1.6.2 没安装SSL模块

报错信息

nginx: [emerg] the "ssl" parameter requires ngx_http_ssl_module in /usr/local/nginx/conf/nginx.conf:26

解决方案

1. 恢复之前的nginx配置文件

2. 下载模块

cd /usr/src/nginx-1.6.2

./configure --prefix=/usr/local/nginx --with-http_stub_status_module --with-http_ssl_module

make

3. 备份原有已安装好的nginx

cp /usr/local/nginx/sbin/nginx /usr/local/nginx/sbin/nginx.bak

4. 停止现有的Nginx服务

/usr/local/nginx/sbin/nginx -s stop

5. 覆盖原有的Nginx,刚刚重新编译好的nginx在/user/src/nginx/nginx-1.6.2/objs里面

cp ./nginx /usr/local/nginx/sbin/
# 执行的时候会有个询问过程,询问你是否选择覆盖?此时输入 `yes` 然后按`Enter`就行了。
yes
# 回车

6. 查看是否配置成功

#查看 Nginx 版本就可以看到configure arguments: 后面有新的参数了,可见新增的SSL模块成功了
/usr/local/nginx/sbin/nginx -V

7.恢复上面的完整Nginx配置

8. 重启Nginx

/usr/local/nginx/sbin/nginx

6.2 Nginx1.6.2 版本老旧,不支持TLSv1.3

6.2.1 报错信息

nginx: [emerg] the "ssl" parameter requires ngx_http_ssl_module in /usr/local/nginx/conf/nginx.conf:26

6.2.2 报错原因

1. **Nginx 底层使用的密码库是 OpenSSL,也就是说是否支持 TLS 1.3 版本,取决于 OpenSSL 库**

1. OpenSSL 1.0.1以上的版本支持 TLS1.2
2. OpenSSL 1.1.1 及以上版本支持 TLS 1.3 版本

1. Nginx 1.13 以下的版本支持 TLS 1.2
2. Nginx 1.13 以上的版本支持 TLS 1.3 

2. 查看Nginx和OpenSSL版本

/usr/local/nginx/sbin/nginx -V 
 
openssl version -a

6.2.3 解决方案

1. 升级Nginx支持TLSv1.2 TLSv1.3

1. 下载需要更新的Nginx版本,解压

# 我是解压在本目录 如需指定目录解压添加 -C 指定目录
tar -zxvf nginx-1.20.2.tar.gz

2. 编译并make(不进行make install)

# 进入解压目录
cd ./nginx-1.20.2
# 进行配置
./configure
# 进行编译
make
# 编译完成后可以看到一个objs文件夹,进入到objs文件夹,里面有个nginx二进制文件
cd ./objs

2. 升级方法一

1. 备份安装目录下的nginx

cd /usr/local/nginx/sbin
mv nginx nginx.bak

2、复制objs目录下的nginx到当前sbin目录下

cp /var/src/nginx/nginx-1.20.2/objs/nginx /usr/local/nginx/sbin/

3、发送信号user2给nginx老版本对应的进程

kill -user2 'more /usr/local/logs/nginx.pid'

4、发送信号quit给nginx老版本的进程

kill -quit 'more /usr/local/nginx/logs/nginx.pid.oldbin'

5、查看是否升级成功

./nginx -v

2. 升级方法一

1. 备份安装目录下的nginx

cd /usr/local/nginx/sbin
mv nginx nginx.bak

2、复制objs目录下的nginx到当前sbin目录下

cp /var/src/nginx/nginx-1.20.2/objs/nginx /usr/local/nginx/sbin/

3、进入到安装目录,执行make upgrade

cd /var/src/nginx/nginx-1.20.2
make upgrade

4、查看是否升级成功

./nginx -v

2. 升级OpenSSL支持TLSv1.2 TLSv1.3

1. 下载需要更新的OpenSSL版本,解压

wget https://www.openssl.org/source/openssl-1.1.1i.tar.gz

# 我是解压在本目录 如需指定目录解压添加 -C 指定目录
tar -xzvf openssl-1.1.1i.tar.gz

这里要是下载不了的话可以手动下载完了再用ftp拖到服务器中

2. 编译源码安装

cd openssl-1.1.1i
./config
make && make install

3. 然后另起一个服务器窗口,检查一下openssl版本

不出意外的话会报:openssl: error while loading shared libraries: libssl.so.1.1: cannot open shared object file: No such file or directory错误,执行下面命令:

ln -s /usr/local/lib64/libssl.so.1.1 /usr/lib64/libssl.so.1.1
ln -s /usr/local/lib64/libcrypto.so.1.1 /usr/lib64/libcrypto.so.1.1

3. Nginx 增加http_v2_module 模块

1. 查看Nginx原有模块

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

是否携带--with-http_v2_module

2. 下载模块

cd /var/src/nginx/nginx-1.20.2/

./configure --prefix=/usr/local/nginx --with-http_stub_status_module --with-http_ssl_module --with-http_v2_module

有可能会报错:SSL modules require the OpenSSL library.You can either do not enable the modules

我的情况是系统自带了openssl 1.0.1,然后又自己装了openssl 1.1.1,就出这个问题了。然后执行:yum remove openssl-devel卸载就好了

3. 编译!!, 这里不要 make install !!!!!!!!!!

make

4. 停止Nginx服务

/usr/local/nginx/sbin/nginx -s stop

5. 备份原有已安装好的Nginx

cp /usr/local/nginx/sbin/nginx /usr/local/nginx/sbin/nginx.bak

6. 覆盖原来的Nginx

cp /var/src/nginx/nginx-1.20.2/objs/nginx /usr/local/nginx/sbin/

7. 启动Nginx

/usr/local/nginx/sbin/nginx

4.Nginx 配置文件增加 TLSv1.3的配置

server {
        # ...
        ssl_protocols TLSv1.2 TLSv1.3;
        # ...
}
posted @ 2023-11-20 23:18  河图s  阅读(1639)  评论(0)    收藏  举报