Nginx-为不支持https(ssl)的web服务器提供https(ssl)服务

Nginx介绍

nginx是一个轻量级的WEB服务器及反向代理服务器,因为目前项目服务器thttpd不支持SSL协议,所以需要通过反向代理服务器来支持SSL协议。

如何使用Nginx

环境

OS: Ubuntu16.04
WebServer: thttpd

安装

sudo apt-get install nginx

配置

cd /etc/nginx/conf.d
touch server-8080.conf

server-8080.conf内容如下:

server {
listen 8080 ssl; #监听8080端口
ssl_certificate /etc/nginx/conf.d/ssl/server.crt;
ssl_certificate_key /etc/nginx/conf.d/ssl/server.key;
ssl_prefer_server_ciphers on;
keepalive_timeout 60;
ssl_session_cache shared:SSL:10m;
ssl_session_timeout 10m;

location / {
    proxy_pass http://0.0.0.0:8888/; #转发到8888端口上
    proxy_next_upstream error http_500; 
    proxy_set_header Accept-Enconding "";
    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;#真实ip地址保存至请求头
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;#真实ip地址保存至请求头
    proxy_set_header X-Forwarded-Proto $scheme;
    add_header Front-End-Https on;
    proxy_redirect off;
  }
}

证书

ssl协议需要生成证书,配置文件的server.crt和server.key即证书。

sudo openssl req -new -x509 -days 3650 -extensions v3_ca -keyout ca.key -out ca.crt
sudo openssl genrsa -out server.key 2048
sudo openssl req -out server.csr -key server.key -new
sudo openssl x509 -req -in server.csr -CA ca.crt -CAkey ca.key -CAcreateserial -out server.crt -days 3650

隐藏版本号

为了安全通常把服务器版本隐藏。

cd /etc/nignx
sudo vim nginx.conf

配置如下

http {
...
server_tokens off;
...
}

启动停止

sudo systemctl start|stop|status nginx

thttpd修改

因为thttpd头文件没有X-Real-IP,所以需要把X-Real-IP添加到头文件中。

下载

官网:http://www.acme.com/software/thttpd/
点击Fetch the software,下载thttpd源码。

修改内容

libhttpd.h 148行

httpd_conn结构体增加char* x_real_ip;

...
off_t first_byte_index, last_byte_index;
int keep_alive;
int should_linger;
struct stat sb;
int conn_fd;
char* file_address;
char* x_real_ip; //新增x_real_ip
} httpd_conn;

libhttpd.c 2246行
解析请求头时把X-Real-IP加上

...
else if ( strncasecmp( buf, "X-Real-IP:", 10 ) == 0 )
    {
    cp = &buf[10];
    cp += strspn( cp, " \t" );
    hc->x_real_ip = cp;
    }
...

libhttpd.c 3141行
设置环境变量把X_Real_IP加上

...    
if (hc->x_real_ip[0] != '\0')
envp[envn++] = build_env( "X_Real_IP=%s", hc->x_real_ip );
...

编译

编译后生成thttpd

configure
make

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

友情链接更多精彩内容