配置Nginx及安装SSL模块

2024-03-12 11:26:08 浏览数 (2)

关于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,重启

0 人点赞