• 源码编译安装nginx 1.18.0
  • pcre zlib openssl的库通过yum安装
  • nginx 源码安装maxmind IP 库, 编译安装谷歌 brotli 压缩
  • 修改最大打开文件描述符数到最大
  • 如需不需要关闭selinux, iptables, firewalld, 请在disable_firewall前面加#
  • nginx 反向代理配置文件,nginx开启缓存配置,请参考下方的nginx.conf
  • nginx 开启反向代理websocket

 

#!/bin/bash
yum install epel-release -y
yum install gcc gcc-c++ pcre pcre-devel openssl openssl-devel zlib zlib-devel make automake -y
yum install autoconf libtool iptables-services wget bind-utils unzip -y

cd /usr/local/src
rm -rf *

mv /etc/localtime /etc/localtime.bak
/bin/cp -f /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
echo 'ZONE="CST"' > /etc/sysconfig/clock


disable_firewall() {

setenforce 0
sed -i "s/=enforcing/=disabled/g" /etc/selinux/config
systemctl firewalld stop
systemctl disable firewalld
chkconfig iptables on
service iptables start
iptables -F
service iptables save

}

disable_firewall

cd /usr/local/src/
wget http://download.zhufunin.com/libmaxminddb-1.3.2.tar.gz
tar zxf libmaxminddb-1.3.2.tar.gz
cd libmaxminddb-1.3.2
./configure
make && make install
[[ -z `cat /etc/ld.so.conf |grep "\/usr\/local\/lib"` ]] && echo "/usr/local/lib" >> /etc/ld.so.conf
ldconfig

cd /usr/local/src/
wget http://download.zhufunin.com/ngx_http_geoip2_module.zip
unzip ngx_http_geoip2_module.zip

wget http://download.zhufunin.com/ngx_brotli.tar.gz
tar zxf ngx_brotli.tar.gz

wget http://nginx.org/download/nginx-1.18.0.tar.gz
tar zxf nginx-1.18.0.tar.gz

useradd -M -s /sbin/nologin www

cd /usr/local/src/nginx-1.18.0
./configure \
--user=www \
--group=www \
--prefix=/usr/local/nginx \
--with-http_ssl_module \
--with-http_sub_module \
--with-http_gzip_static_module \
--with-http_gunzip_module \
--with-http_stub_status_module \
--with-http_realip_module \
--with-stream \
--with-http_v2_module \
--with-threads \
--with-http_slice_module \
--add-module=/usr/local/src/ngx_http_geoip2_module-master \
--add-module=/usr/local/src/ngx_brotli
make -j2
make install

 

 

 

nginx

启动/usr/local/nginx/sbin/nginx

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

停止:  /usr/local/nginx/sbin/nginx -s quit

 

下面使一些额外的

mkdir -p /usr/local/nginx/ssl
openssl req -x509 -nodes -days 10000 -newkey rsa:2048 -keyout /usr/local/nginx/ssl/nginx.key -out /usr/local/nginx/ssl/nginx.crt -subj "/C=US/ST=US/L=US/O=ssl/OU=ssl/CN=ssl.com/emailAddress=admin@ssl.com"

mkdir -p /usr/local/nginx/geoip
cd /usr/local/nginx/geoip
wget http://download.zhufunin.com/maxmind-city.mmdb.tar.gz
tar zxf maxmind-city.mmdb.tar.gz


echo "ulimit -n 65536" >> /etc/profile
echo "root soft nofile 65536" >> /etc/security/limits.conf
echo "root hard nofile 65536" >> /etc/security/limits.conf
echo "* soft nofile 65536" >> /etc/security/limits.conf
echo "* hard nofile 65536" >> /etc/security/limits.conf
source /etc/profile

 

 nginx.conf配置

user  www;
pid                  /var/run/nginx.pid;
worker_processes     auto;
worker_rlimit_nofile 65535;
events {
    multi_accept       on;
    worker_connections 65535;
}
http {
    charset              utf-8;
    sendfile             on;
    tcp_nopush           on;
    tcp_nodelay          on;
    server_tokens        off;
    log_not_found        off;
    types_hash_max_size  2048;
    client_max_body_size 100M;
    server_names_hash_bucket_size  64;
    resolver 8.8.8.8 8.8.4.4 1.1.1.1 valid=600s ipv6=off;
    resolver_timeout 30s;
    proxy_connect_timeout 600;
    proxy_send_timeout 600;
    proxy_read_timeout 600;

    # MIME
    include              mime.types;
    default_type         application/octet-stream;
    # Logging
    log_format main '$time_local{F;}$remote_addr{F;}$http_host{F;}$request_uri{F;}$upstream_cache_status{F;}$status{F;}$upstream_addr{F;}$upstream_status{F;}$upstream_response_time{F;}$request_time{F;}$body_bytes_sent{F;}$request_length{F;}$content_length{F;}$sent_http_cache_control{F;}$sent_http_content_type{F;}$http_referer{F;}$http_x_forwarded_for{F;}$http_user_agent{F;}$server_port{F;}$server_protocol{F;}$request_method{F;}$scheme{F;}$ssl_protocol{F;}$remote_port{F;}$http_cookie{F;}$args';
    access_log           /usr/local/nginx/logs/access.log main;
    error_log            /usr/local/nginx/logs/error.log;

 
    proxy_cache_path /usr/local/nginx/proxy_cache/ levels=1:2 keys_zone=static:5m inactive=14d max_size=5G use_temp_path=off;

    upstream myupstream {
    server 127.0.0.1:7070;
    }

    server {
        listen       80;
        server_name  www.test123.com;
        access_log off;
        # gzip
        gzip              on;
        gzip_min_length 1k;
        gzip_vary         on;
        gzip_proxied      any;
        gzip_comp_level   6;
        gzip_types        text/xml text/plain application/xml application/xhtml+xml image/svg+xml text/javascript application/x-javascript application/javascript application/json text/css application/font-woff application/rss+xml application/atom+xml;

        # brotli
        brotli            on;
        brotli_comp_level 6;
        brotli_types      text/xml text/plain application/xml application/xhtml+xml image/svg+xml text/javascript application/x-javascript application/javascript application/json text/css application/font-woff application/rss+xml application/atom+xml;

        location / {
        proxy_http_version                 1.1;
        proxy_cache_bypass                 $http_upgrade;
        proxy_set_header Upgrade           $http_upgrade;
        proxy_set_header Connection        "upgrade";
        proxy_set_header Host              $host;
        proxy_set_header X-Real-IP         $remote_addr;
        proxy_set_header X-Forwarded-For   $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_set_header X-Forwarded-Host  $host;
        proxy_set_header X-Forwarded-Port  $server_port;
        proxy_set_header Accept-Encoding "";
        proxy_pass http://myupstream;
        }
        # favicon.ico
        location = /favicon.ico {
        log_not_found off;
        access_log    off;
        }
        # ACME-challenge
        location ^~ /.well-known/acme-challenge/ {
            alias /usr/local/nginx/ssl/;
        }
        #proxy_store
        location ~*  ^.*\.(jpg|png)$
       {
            proxy_http_version          1.1;
            proxy_set_header Connection '';
            proxy_set_header Host              $host;
            proxy_set_header X-Real-IP         $remote_addr;
            proxy_set_header X-Forwarded-For   $proxy_add_x_forwarded_for;
            proxy_set_header X-Forwarded-Proto $scheme;
            proxy_set_header X-Forwarded-Host  $host;
            proxy_set_header X-Forwarded-Port  $server_port;

            proxy_set_header Accept-Encoding "";
            proxy_ignore_headers Cache-Control;
            proxy_ignore_headers Set-Cookie;
            proxy_hide_header Cache-Control;
            proxy_hide_header Set-Cookie;
                add_header X-Proxy-Cache 'HIT';
                root /usr/local/nginx/proxy_store/;
                proxy_store on;
                proxy_store_access user:rw group:rw all:rw;
                proxy_temp_path /usr/local/nginx/proxy_store/;
                if ( !-e $request_filename) {
                    proxy_pass http://myupstream;
                }
        }
        #proxy_cache
        location ~*  ^.*\.(gif|jpg|jpeg|png|bmp|swf|woff2|css|js|rar|zip|docx|tiff|csv|pptx|svg|midi|ppt|mid|fnt|svgz|ps|doc|eps|eot|tif|xlsx|woff|ejs|pdf|ico|class|webp|jar|pls|otf|xls|pict|ttf|opus|webm|mp3|ogg|zip|mp4|ipa|apk|wav|m4a)$
       {
            proxy_http_version          1.1;
            proxy_set_header Connection '';
            proxy_set_header Host              $host;
            proxy_set_header X-Real-IP         $remote_addr;
            proxy_set_header X-Forwarded-For   $proxy_add_x_forwarded_for;
            proxy_set_header X-Forwarded-Proto $scheme;
            proxy_set_header X-Forwarded-Host  $host;
            proxy_set_header X-Forwarded-Port  $server_port;
                
            proxy_ignore_headers Cache-Control;
            proxy_ignore_headers Set-Cookie;
            proxy_hide_header Cache-Control;
            proxy_hide_header Set-Cookie;
 

            add_header X-Proxy-Cache '$upstream_cache_status';
                proxy_cache static;
                proxy_cache_lock on;
                proxy_cache_key $uri$is_args$args;
                proxy_cache_valid 404 10s;
                proxy_cache_valid 200 206 301 304 14d;
                proxy_cache_valid 405 2m;
                expires 14d;
                if ( !-e $request_filename) {
                    proxy_pass http://myupstream;
                }
        }

    }
}

 免费let's encrypt证书申请

mkdir -p /usr/local/shell/
cd /usr/local/shell/
wget -O acme_tiny.py http://download.zhufunin.com/acme_tiny.py
wget -O autossl.sh http://download.zhufunin.com/autossl.sh
chmod 755 autossl.sh
chmod 755 acme_tiny.py

用法是
cd /usr/local/shell/
./autossh.sh www.123abc.com
后面接域名

 

相关文章: