前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >配置Nginx及安装SSL模块

配置Nginx及安装SSL模块

作者头像
云端之上
发布2024-03-12 11:26:08
3300
发布2024-03-12 11:26:08
举报
文章被收录于专栏:云端之上云端之上

关于Nginx

Nginx是一个反向代理服务器。Nginx不仅可以部署网站,还可以用于配合WAF进行端口监听,如果某项目端口被该项目持续监听,同时防火墙设置拒绝外网访问该端口,Nginx可以将允许外网连接的自定义端口(未处于被监听状态,其它项目可监听该端口)访问请求转发至防火墙拒绝外网访问的端口,因为Nginx转发数据全程是在内网进行。

1.需要注意的是Nginx开启后它的默认解析目录为/var/www/html,用户只能访问操作服务器上/html/目录内的内容。

2.Nginx还可以管理用户访问的路径。例如用户浏览器输入http://121.3.20.1对服务器进行访问,Nginx可以代理转发用户的访问请求。即用户访问的http://121.3.20.1,Nginx可以直接跳转至http://121.3.20.1:2000,用户访问的http://121.3.20.1/a/index.html,Nginx可以直接跳转至http://121.3.20.1/b/index.html

本地重新编译安装Nginx

注:也可不编译直接在线安装,但如果需要Nginx使用ssl证书,则必须本地重新编译安装,因为需要重新编译Nginx配置ssl模块。

1.进入指定的文件夹:

代码语言:javascript
复制
cd /usr/local/src

2.下载指定的Nginx安装包(也可将本地下载的Nginx包上传):

代码语言:javascript
复制
wget http://nginx.org/download/nginx-1.15.9.tar.gz

3.解压安装包:

代码语言:javascript
复制
tar -zxvf nginx-1.15.9.tar.gz

4.进入解压的安装包文件夹:

代码语言:javascript
复制
cd nginx-1.15.9

5.配置ssl模块:

代码语言:javascript
复制
./configure --prefix=/usr/local/nginx --with-http_ssl_module

6.编译Nginx:

代码语言:javascript
复制
make

7.使用覆盖的策略进行安装Nginx:

代码语言:javascript
复制
sudo make install

8.创建必要的目录,并设置权限:

代码语言:javascript
复制
sudo mkdir -p  /usr/local/nginx/logs/
sudo chmod -R 0755  /usr/local/nginx/logs/
sudo mkdir -p /var/cache/nginx
sudo chown -R nginx:nginx  /usr/local/nginx/logs/  /var/cache/nginx

9.在/etc/systemd/system/nginx.service目录下创建并保存Nginx服务文件,服务文件内容如下:

代码语言:javascript
复制
[Unit]
Description=The NGINX HTTP and reverse proxy server      
After=network.target
#Description为服务名称,随便取
#nginx.pid的路径,一般都是这个路径
[Service]
Type=forking
PIDFile=/run/nginx.pid              
ExecStartPre=/usr/local/nginx/sbin/nginx -t                   
ExecStart=/usr/local/nginx/sbin/nginx 
ExecReload=/usr/local/nginx/sbin/nginx -s reload 
ExecStop=/bin/kill -s QUIT $MAINPID
PrivateTmp=true
#/usr/local/nginx/为安装后的nginx的路径,一定要根据你的系统实际情况手动确认路径是否正确
[Install]
WantedBy=multi-user.target

10.将ssl证书.key和.pem文件上传至服务器,根据自行需要存于指定文件夹下(假设这里文件夹为/usr/local/nginx/cert)

11.编辑Nginx的配置文件,路径通常为:/usr/local/nginx/conf/nginx.conf

代码语言:javascript
复制
#user为用户,不用改
#error_log为Nginx错误日志存储路径。路径根据nginx的实际目录填写。如果nginx在/usr/local/nginx/解压安装的,一般都在这里。务必确保与第8步骤创建的nginx日志文件夹一致。
user nginx;  
worker_processes auto;
error_log /usr/local/nginx/logs/error.log;   
pid /run/nginx.pid;   
events {
    worker_connections 1024;
}
http {
    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';
#client_max_body_size为允许上传最大文件大小为10g,nginx默认最多允许上传1m
    client_max_body_size 10240M;  
#access_log路径根据nginx的实际目录填写
    access_log  /usr/local/nginx/logs/access.log  main;   
    sendfile            on;
    tcp_nopush          on;
    tcp_nodelay         on;
    keepalive_timeout   65;
    types_hash_max_size 2048;
    #FastCGI相关参数是为了改善网站的性能:减少资源占用,提高访问速度。下面参数看字面意思都能理解。
    fastcgi_connect_timeout 300;
    fastcgi_send_timeout 300;
    fastcgi_read_timeout 300;
    fastcgi_buffer_size 64k;
    fastcgi_buffers 4 64k;
    fastcgi_busy_buffers_size 128k;
    fastcgi_temp_file_write_size 128k;
    #gzip模块设置
    gzip on;         #开启gzip压缩输出
    gzip_min_length 10k;    #最小压缩文件大小,超过1k才压缩
    gzip_buffers 16 8k;    #压缩缓冲区,16个8k内存
    gzip_http_version 1.0;    #压缩版本(默认1.1,前端如果是squid2.5请使用1.0)
    gzip_comp_level 6;    #压缩等级,建议为6,等级越高压缩越慢
    #压缩类型
    gzip_types text/plain text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript;   
    gzip_vary on;
    #开启限制IP连接数的时候需要使用
    #limit_zone crawler $binary_remote_addr 10m;
    include             /usr/local/nginx/conf/mime.types;     #路径根据nginx的实际目录填写
    default_type        application/octet-stream;   
    server {
       listen       80 default_server;
        listen       [::]:80 default_server;
        server_name     #用户访问的域名或IP;
       include /etc/nginx/default.d/*.conf;
# 凡是通过80端口访问,都跳转至指定网址和端口
        location / {           
            proxy_pass http://xxx.cn:2000;
        }
#该判定优先级比“/”高,因为它是Nginx使用正则表达式匹配,凡是访问/xiaobai/目录内的文件,都跳转至/var/www/html目录。意思是凡是访问/xiaobai/目录的请求都不跳转到http://xxx.cn:2000,而是跳转至/var/www/html目录。
#例用户http://www.abc.com/a/xiaobai/index.html,则该请求会被Nginx转发至此,处代理转发为http://www.abc.com/var/www/html/xiaobai/index.html。
#由于Nginx不能访问服务器上的全部文件,只能访问默认设定的指定目录(一般为/var/www/html/),所以此请求相当于用户访问/var/www/html/xiaobai/index.html文件
        location /xiaobai/ {      
            root /var/www/html;
        }
    }
#访问一级域名时,第一个项目时跳转到3000端口
    server {
    # 监听端口,开启ssl, 这里ssl就是上面安装的ssl模块
    listen    443 ssl;
    listen [::]:443 ssl;
    # 域名,多个以空格分开
    server_name  xxx.cn www.xxx.cn;   #当有多个server时,会根据域名进行区分选择执行哪个server
    # 配置RSA算法证书
    ssl_certificate /usr/local/nginx/cert/xxx.cn.pem; #需修改为实际证书文件路径
    ssl_certificate_key /usr/local/nginx/cert/xxx.cn.key; #需修改为实际私钥文件路径
    ssl_session_cache shared:SSL:1m;
    ssl_session_timeout 5m;
    # 配置加密套件# ssl_ciphers HIGH: !aNULL: !MD5;
    ssl_ciphers ECC-SM2-SM4-CBC-SM3:ECC-SM2-SM4-GCM-SM3:ECDHE-SM2-SM4-CBC-SM3:ECDHE-SM2-SM4-GCM-SM3:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-SHA:AES128-GCM-SHA256:AES128-SHA256:AES128-SHA:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:AES256-GCM-SHA384:AES256-SHA256:AES256-SHA:ECDHE-RSA-AES128-SHA256:!aNULL:!eNULL:!RC4:!EXPORT:!DES:!3DES:!MD5:!DSS:!PKS;
    ssl_protocols TLSv1 TLSv1.1 TLSv1.2 TLSv1.3;
    ssl_prefer_server_ciphers on;
    #对 "/" 启用反向代理
#用户通过https访问时,加载完ssl证书后,如果访问域名为xxx.cn www.xxx.cn,默认执行该server转发访问请求至2000端口,http://127.0.0.1:2000
    location / {
#因为https是不能识别端口的,遇到端口会自动去除掉换成443端口隐性显示,所以返回用http
        proxy_pass http://127.0.0.1:2000;   
        proxy_redirect off;   #不对返回结果进行任何处理,直接返回原始数据
        #后端的Web服务器可以通过X-Forwarded-For获取用户真实IP
        #proxy_set_header X-Real-IP $remote_addr;
        #proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }
}
#访问二级域名时,第2个项目时默认跳转到2001端口,如果用户访问连接中有https://baobao.xx.cn/baobei/index.html,则执行/var/www/html/baobei/index.html文件
server {
    listen 443 ssl;
    listen [::]:443 ssl;
    server_name baobao.xx.cn;
    # 配置RSA算法证书
    ssl_certificate /usr/local/nginx/cert/jianfei.hbswhsxy.cn.pem; #需修改为实际证书文件路径
    ssl_certificate_key /usr/local/nginx/cert/jianfei.hbswhsxy.cn.key; #需修改为实际私钥文件路径
    ssl_session_cache shared:SSL:1m;
    ssl_session_timeout 5m;
    # 配置加密套件# ssl_ciphers HIGH: !aNULL: !MD5;
    ssl_ciphers ECC-SM2-SM4-CBC-SM3:ECC-SM2-SM4-GCM-SM3:ECDHE-SM2-SM4-CBC-SM3:ECDHE-SM2-SM4-GCM-SM3:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-SHA:AES128-GCM-SHA256:AES128-SHA256:AES128-SHA:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:AES256-GCM-SHA384:AES256-SHA256:AES256-SHA:ECDHE-RSA-AES128-SHA256:!aNULL:!eNULL:!RC4:!EXPORT:!DES:!3DES:!MD5:!DSS:!PKS;
    ssl_protocols TLSv1 TLSv1.1 TLSv1.2 TLSv1.3;
    ssl_prefer_server_ciphers on;
#需要注意不要输入域名,会出问题,输入120.0.0.1
    location / {
        proxy_pass http://127.0.0.1:2001;
        proxy_redirect off;
    }
# 处理含有/baobei/的url.如果用户访问连接中有https://baobao.xx.cn/baobei/index.html,则执行/var/www/html/baobei/index.html文件
    location /baobei/ {                   
        root /var/www/html;
 }
#处理含有/baobei/server/的url,当访问/baobei/server/的目录时会通过https的443端口进入nginx这里,然后完成跳转
    location  /baobei/server/ {                   
        proxy_pass http://localhost:7000/r/x;
        proxy_redirect off;
    }
}
#后续还有其它项目可以都放在二级域名不同目录内,ngifx根据目录进行区分
}

12.编辑环境变量,使在任意路径都可使用nginx:

代码语言:javascript
复制
source ~/.bashrc

13.使编辑的环境变量改动立即生效:

代码语言:javascript
复制
source ~/.bashrc

14.运行nginx:

代码语言:javascript
复制
sudo systemctl start nginx

15.验证nginx是否成功安装ssl模块:

代码语言:javascript
复制
nginx -V

16.修改后Nginx的配置文件后需要重新载入Nginx配置文件才可生效:

代码语言:javascript
复制
sudo systemctl reload nginx

17.设置Nginx开机自启动

代码语言:javascript
复制
sudo systemctl enable nginx

18.进入/usr/sbin/sestatus下查看sestatus,如果不是disabled ,修改为SELINUX=disabled,重启

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2024-02-17,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 关于Nginx
  • 本地重新编译安装Nginx
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档