当前位置:首页 » 文件传输 » nginx单边访问
扩展阅读
webinf下怎么引入js 2023-08-31 21:54:13
堡垒机怎么打开web 2023-08-31 21:54:11

nginx单边访问

发布时间: 2022-09-02 18:31:10

❶ nginx服务器怎么配置浏览器访问需要证书

一直在用Nginx做反向代理,但是其SSL的配置只用过普通的服务端单向证书。在Google,网络狂搜一通之后,一无所获,依旧是那老三样,只有单向认证的示例。浏览器端双向认证的配置好像从没人写过。
因为要来回的设置所有直接使用域名操作比如:
chaodiquan.com 解析到 IP上面(IP要用你自己的,如果使用CDN另算)
这个是主要在最后的实际应用的测试的使用会用到

因为是自己实际应用,只好从OpenSSL的客户端证书开始学起,一点一点啃,大段大段的E文让我这半瓶子醋看的头晕眼晕。
的提示下终于把这个证书搞定,来秀一个。

这需要一下几个步骤:
1) 安装openssl用来做证书认证
2) 创建一个CA根证书
3) 创建一个自签名的服务器证书
4) 设置Nginx
5) 创建客户端证书
6) 安装客户端证书到浏览器
7) Profit.

1)
这一步我是在ubuntu下直接apt-get装的openssl, 配置文件安装在/etc/ssl/openssl.cnf
修改openssl.cnf的以下几段
[ ca ]
default_ca = foo

Openssl将会寻找名称为foo的配置段

[ foo ]
dir = /etc/ssl/private
database = $dir/index.txt
serial = $dir/serial
private_key = $dir/ca.key
certificate = $dir/ca.crt
default_days = 3650
default_md = md5
new_certs_dir = $dir
policy = policy_match

policy_match 我保持默认值没有改

[ policy_match ]
countryName = match
stateOrProvinceName = match
organizationName = match
organizationalUnitName = match
commonName = supplied
emailAddress = optional

默认签发有效期为10年,你可以自己设置一个合适的值

2)
创建一个新的CA根证书
下面的几个脚本我都放在/etc/ssl目录下

new_ca.sh:
#!/bin/sh
# Generate the key. genrsa意思是生成一个私钥
openssl genrsa -out private/ca.key
# Generate a certificate request. req表示生成证书,还能生成ca证书,-new表示产生一个新csr,需要输入一些信息,-key表示私钥,
openssl req -new -key private/ca.key -out private/ca.csr
#
Self signing key is bad... this could work with a third party signed
key... registeryfly has them on for $16 but I'm too cheap lazy to get
one on a lark.
# I'm also not 100% sure if any old certificate will
work or if you have to buy a special one that you can sign with. I could
investigate further but since this
# service will never see the light of an unencrypted Internet see the cheap and lazy remark.
# So self sign our root key.
x509是一个证书生成工具,显示证书内容,转换格式,给CSR签名等

-signkey用来处理CSR和给证书签名,就像CA。使用时得同时提供私钥,把输入文件变成自签名的证书,如果输入CSR文件,则生成自签名文件

-days证书有效时间

-in输入文件 -out输出文件

openssl x509 -req -days 3650 -in private/ca.csr -signkey private/ca.key -out private/ca.crt
#
Setup the first serial number for our keys... can be any 4 digit hex
string... not sure if there are broader bounds but everything I've seen
uses 4 digits.
echo FACE > private/serial
# Create the CA's key database.
touch private/index.txt

# Create a Certificate Revocation list for removing 'user certificates.'

gencrl在index文件中生成一个CRL相关的信息

-crldays是crl过期的时间
openssl ca -gencrl -out /etc/ssl/private/ca.crl -crldays 7

执行 sh new_ca.sh 生成新的CA证书

3)
生成服务器证书的脚本

new_server.sh:
#
Create us a key. Don't bother putting a password on it since you will
need it to start apache. If you have a better work around I'd love to
hear it.
openssl genrsa -out private/server.key
# Take our key and create a Certificate Signing Request for it.
openssl req -new -key private/server.key -out private/server.csr
# Sign this bastard key with our bastard CA key.

-cert CA本身的证书名

-keyfile CA本身的私钥

这句就是相当于CA用他的证书和私钥,根据服务器的证书,来给出一个CA认证的证书
openssl ca -in private/server.csr -cert private/ca.crt -keyfile private/ca.key -out private/server.crt

执行 sh new_server.sh 生成新服务器的证书

4)
最要命的一步,尝试多次后终于搞明白。
配置 nginx 的ssl支持

我的配置如下:

# HTTPS server
#
server {
listen 443;
server_name localhost;

# 打开ssl
ssl on;
# 上一步生成的服务器证书
ssl_certificate /etc/ssl/private/server.crt;
# 服务器证书公钥
ssl_certificate_key /etc/ssl/private/server.key;
# 客户端证书签名 也就是第二步生成的CA签名证书
ssl_client_certificate /etc/ssl/private/ca.crt;
# ssl session 超时
ssl_session_timeout 5m;
# 打开SSL客户端校验 (双向证书检测)
ssl_verify_client on;

#ssl_protocols SSLv2 SSLv3 TLSv1;
#ssl_ciphers ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP;
ssl_prefer_server_ciphers on;

location / {
root /var/www/nginx-default;
index index.html index.htm;
}

启动你的nginx ,等待客户连接

5)
现在来生成客户端证书

new_user.sh:
#!/bin/sh
# The base of where our SSL stuff lives.
base="/etc/ssl/private"
# Were we would like to store keys... in this case we take the username given to us and store everything there.
mkdir -p $base/users/$1/

# Let's create us a key for this user... yeah not sure why people want to use DES3 but at least let's make us a nice big key.

生成用户私钥
openssl genrsa -des3 -out $base/users/$1/$1.key 1024
# Create a Certificate Signing Request for said key.

根据用户私钥生成他的证书
openssl req -new -key $base/users/$1/$1.key -out $base/users/$1/$1.csr
# Sign the key with our CA's key and cert and create the user's certificate out of it.

模拟CA来给出CA认证过的证书
openssl ca -in $base/users/$1/$1.csr -cert $base/ca.crt -keyfile $base/ca.key -out $base/users/$1/$1.crt

# This is the tricky bit... convert the certificate into a form that most browsers will understand PKCS12 to be specific.
#
The export password is the password used for the browser to extract the
bits it needs and insert the key into the user's keychain.
# Take the same precaution with the export password that would take with any other password based authentication scheme.

pkcs12 处理pkcs12文件
根据CA认证过的证书和用户的私钥来生成p12验证证书,可用服务器导入。
openssl pkcs12 -export -clcerts -in $base/users/$1/$1.crt -inkey $base/users/$1/$1.key -out $base/users/$1/$1.p12

执行 sh new_user.sh yourname 来生成一个 yourname 的client证书
按照提示一步一步来,这里要注意的是客户证书的几个项目要和根证书匹配
也就是第一步时配置的:
countryName = match
stateOrProvinceName = match
organizationName = match
organizationalUnitName = match

不一致的话无法生成最后的客户证书

6)
发送上一步生成的 yourname.p12 到客户端。
IE下双击安装就可以导入。
FireFox安装 :
Go into preferences.
Advanced.
View Certificates.
Import.
Enter master password for FireFox (if you don't have one set one here otherwise stolen laptop = easy access).
Enter in the export password given to you by the de who created your cert.
Hit OK like a mad man.
打开第一步进行设置的域名解析会弹出对话框来要求你选择使用哪个证书,选择刚才安装的证书。选择接受服务器证书。现在你可以正常访问服务器拉。如果没弄对的话就会出现400 Bad request certification的错误
7)没啥拉,有问题多试几次,其实都是很简单的事。就是中文的资料太少了。
希望可以帮助到你哈

❷ nginx负载均衡怎么访问数据库

nginx 是一个轻量级的、高性能的 web server 主要可以干两件事情:

1、直接作为http server(代替apache,对PHP需要FastCGI处理器支持);
2、作为反向代理服务器实现负载均衡

以下我们就来举例说明如何使用 nginx 实现负载均衡。因为nginx在处理并发方面的优势,现在这个应用非常常见。当然了Apache的 mod_proxy和mod_cache结合使用也可以实现对多台app server的反向代理和负载均衡,但是在并发处理方面apache还是没有 nginx擅长。

方法/步骤
1
一、环境:
a. 我们本地是Windows系统,然后使用VirutalBox安装一个虚拟的Linux系统。
在本地的Windows系统上分别安装nginx(侦听8080端口)和apache(侦听80端口)。在虚拟的Linux系统上安装apache(侦听80端口)。
这样我们相当于拥有了1台nginx在前端作为反向代理服务器;后面有2台apache作为应用程序服务器(可以看作是小型的server cluster。;-) );

b. nginx用来作为反向代理服务器,放置到两台apache之前,作为用户访问的入口;
nginx仅仅处理静态页面,动态的页面(php请求)统统都交付给后台的两台apache来处理。
也就是说,可以把我们网站的静态页面或者文件放置到nginx的目录下;动态的页面和数据库访问都保留到后台的apache服务器上。

c. 如下介绍两种方法实现server cluster的负载均衡。
我们假设前端nginx(为127.0.0.1:80)仅仅包含一个静态页面index.html;
后台的两个apache服务器(分别为localhost:80和158.37.70.143:80),一台根目录放置phpMyAdmin文件夹和test.php(里面测试代码为print “server1“;),另一台根目录仅仅放置一个test.php(里面测试代码为 print “server2“;)。

2
二、针对不同请求 的负载均衡:
a. 在最简单地构建反向代理的时候 (nginx仅仅处理静态不处理动态内容,动态内容交给后台的apache server来处理),我们具体的设置为:在nginx.conf中修改:
复制代码 代码如下:
location ~ \.php$ {
proxy_pass 158.37.70.143:80 ;
}
这样当客户端访问localhost:8080/index.html的时候,前端的nginx会自动进行响应;
当用户访问localhost:8080/test.php的时候(这个时候nginx目录下根本就没有该文件),但是通过上面的设置 location ~ \.php$(表示正则表达式匹配以.php结尾的文件,详情参看location是如何定义和匹配的) ,nginx服务器会自动pass给 158.37.70.143的apache服务器了。该服务器下的test.php就会被自动解析,然后将html的结果页面返回给nginx,然后 nginx进行显示(如果nginx使用memcached模块或者squid还可以支持缓存),输出结果为打印server2。
如上是最为简单的使用nginx做为反向代理服务器的例子;
b. 我们现在对如上例子进行扩展,使其支持如上的两台服务器。
我们设置nginx.conf的server模块部分,将对应部分修改为:
复制代码 代码如下:
location ^~ /phpMyAdmin/ {
proxy_pass 127.0.0.1:80 ;
}
location ~ \.php$ {
proxy_pass 158.37.70.143:80 ;
}
上面第一个部分location ^~ /phpMyAdmin/,表示不使用正则表达式匹配(^~),而是直接匹配,也就是如果客户端访问的 URL是以http://localhost:8080/phpMyAdmin/ 开头的话(本地的nginx目录下根本没有phpMyAdmin目录),nginx会自动pass到127.0.0.1:80 的Apache服务器,该服务器对phpMyAdmin目录下的页面进行解析,然后将结果发送给nginx,后者显示;
如果客户端访问URL是http://localhost/test.php 的话,则会被pass到158.37.70.143:80 的apache进行处理。
因此综上,我们实现了针对不同请求的负载均衡。
如果用户访问静态页面index.html,最前端的nginx直接进行响应;
如果用户访问test.php页面的话,158.37.70.143:80 的Apache进行响应;
如果用户访问目录phpMyAdmin下的页面的话,127.0.0.1:80 的Apache进行响应;

3
三、 访问同一页面 的负载均衡:
即用户访问http://localhost:8080/test.php 这个同一页面的时候,我们实现两台服务器的负载均衡 (实际情况中,这两个服务器上的数据要求同步一致,这里我们分别定义了打印server1和server2是为了进行辨认区别)。
a. 现在我们的情况是在windows下nginx是localhost侦听8080端口;
两台apache,一台是127.0.0.1:80(包含test.php页面但是打印server1),另一台是虚拟机的158.37.70.143:80(包含test.php页面但是打印server2)。

b. 因此重新配置nginx.conf为:
首先在nginx的配置文件nginx.conf的http模块中添加,服务器集群server cluster(我们这里是两台)的定义:
复制代码 代码如下:
upstream myCluster {
server 127.0.0.1:80 ;
server 158.37.70.143:80 ;
}
表示这个server cluster包含2台服务器
〉然后在server模块中定义,负载均衡:
复制代码 代码如下:
location ~ \.php$ {
proxy_pass http://myCluster ; #这里的名字和上面的cluster的名字相同
proxy_ www.gzlij.comredirect off;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
这样的话,如果访问http://localhost:8080/test.php 页面的话,nginx目录下根本没有该文件,但是它会自动将其pass到myCluster定义的服务区机群中,分别由127.0.0.1:80;或者158.37.70.143:80;来做处理。
上面在定义upstream的时候每个server之后没有定义权重,表示两者均衡;如果希望某个更多响应的话例如:
复制代码 代码如下:
upstream myCluster {
server 127.0.0.1:80 weight=5;
server 158.37.70.143:80 ;
}

4
综上,我们使用nginx的反向代理服务器reverse proxy server的功能,将其布置到多台apache server的前端。
nginx仅仅用来处理静态页面响应和动态请求的代理pass,后台的apache server作为app server来对前台pass过来的动态页面进行处理并返回给nginx。
通过以上的架构,我们可以实现nginx和多台apache构成的机群cluster的负载均衡。
两种均衡:
1)可以在nginx中定义访问不同的内容,代理到不同的后台server; 如上例子中的访问phpMyAdmin目录代理到第一台server上;访问test.php代理到第二台server上;
2)可以在nginx中定义访问同一页面,均衡 (当然如果服务器性能不同可以定义权重来均衡)地代理到不同的后台server上。 如上的例子访问test.php页面,会均衡地代理到server1或者server2上。
实际应用中,server1和server2上分别保留相同的app程序和数据,需要考虑两者的数据同步。

❸ Linux下部署nginx为什么永远只访问一台服务

总共搭建了三台服务器

两台tomcat服务器

服务器A的ip为:192.168.230.135

服务器B的ip为:192.168.230.136

端口均为8080

还有一台nginx服务器 IP为:192.168.230.134

nginx配置文件如下

这种情况是浏览器缓存的原因,你每次访问使用 ctrl+F5 强制刷新试试。

❹ 关于nginx规则

这个涉及到nginx的路由规则的相关概念。简单的说,就是当访问/a时,nginx根据路由规则,把这个请求修改为/b,然后返回/b对象的内容给用户。这个整个的路由转换过程对用户是透明的,也不会引起url的改变。
nginx中,可以使用rewrite指令,完成如上的功能。具体配置如下:
rewrite "^/huhe/s/(\d+)$" /huhe/dishes/rank/shopid/$1 break;

保存修改,然后重启nginx就ok啦。

❺ nginx 只让php入口文件访问,其他php文件禁止直接访问

你用的系统是微擎吗?

正常来说,除了这两个php文件,和回调用的接口外,其它php都是不能直接访问的,文件头有常量判断,未定义就退出了。

所以你的系统有上传漏洞,应该检查是哪里出了问题,并去修复一下。可以从以下几点着手:

  1. 上传权限仅提供给已登录会员,在上传接口中判断未登录状态的,直接返回错误信息

  2. 上传文件类型限制,如果需要的是图片,严格限制图片类型,并做图片规格检测(gd库就可以处理),不符合的不保存文件

  3. 文件名处理,不要使用客户端上传的文件名保存,而是根据规则 生成一个随机的名字保存

  4. 上传频率限制(根据会员限制),比如,一个小时内限制上传5张,一天限制100张,可以有效防止黑客利用上传接口填充垃圾文件到你的服务器

  5. 如果可行,对上传文件做一个临时机制,如上传的文件先放到临时文件夹,资料保存的时候,把文件处理一下,移动到正常的附件目录。这样就可以定期清理临时文件夹,防止上传后没使用的文件过多占用服务器空间。

    不过这个功能改起来会复杂一点,要处理所有使用到上传功能的接口。

以上几点处理好,被上传可执行文件的问题基本上可以杜绝了

而你的解决方案,是只治标不治本的方案

❻ 内部网络通过nginx服务器代理访问外部网络,要怎么配置 注意:内部网络不能联网。

用Nginx做反向代理服务,但是这台Nginx服务器一定要能连接互联网,做反向代理只能访问部分指定网络,还有一种方式就是代理服务器,proxy代理服务器,这台proxy服务器也要能连互联网,通过在PC上代理设置可以访问外网。

❼ 在内网通过nginx可以外网访问指定的网站,只能访问这一个网站。

nginx比较适用作反向代理服务器,不过也支持正向代理

作为正向代理服务器,可以参考下这篇博客

Linux服务器通过Nginx正向代理上网

详细了解nginx的正向反向代理信息,可以参考这两篇博客

nginx功能图解

nginx快速搭建及常用命令,策略配置,错误排查方法

❽ nginx只允许某IP段访问,如何设置

是的 添的是你不能上网的IP 你用的什么路由器?命令行模式的你就要写一条ACL如下access-list 1 deny host 192.168.1.7-192.168.1.254 any any

❾ nginx服务器只能在本机访问为什么

1.
本机系统防火墙限制其他机器的访问
2.
网络中的防火墙设备阻断外界访问
3.
nginx只监听了本地的ip端口,如127.0.0.1:80这样其他机器访问不了,listen指令只写端口号即可绑定当前机器的所有ip

❿ 真心求助.nginx错误

Nginx服务器错误一般有以下几点原因:

1、请求的header过大。nginx默认的header长度上限是4k,如果超过了这个值,nginx会直接返回400错误.

解决方法:配置nginx.conf相关设置。可以通过以下2个参数来调整header上限:

client_header_buffer_size 16k;large_client_header_buffers 4 16k。

2、上传文件过程中出现错误。这时浏览器显示“413 Request Entity Too Large”。这是因为没有设置client_max_body_size,这个参数默认只是1M,也就是说发布的文章内容大小不能超过1M。

解决方法:增加如下两行到nginx.conf的http{}段, 增大nginx上传文件大小限制:设置允许发布内容为8M:client_max_body_size 8M;client_body_buffer_size 128k。

另外如果运行的是php,那么还要检查php.ini,这个大小client_max_body_size要和php.ini中的如下值的最大值一致或者稍大,这样就不会因为提交数据大小不一致出现的错误:post_max_size = 8M;upload_max_filesize = 6M。

修改完配置后,别忘记重新加载。

3、客户端在为等到服务器相应返回前就关闭了客户端描述符。一般出现在客户端设置超时后,服务器主动关闭。

解决方法:根据实际Nginx后端服务器的处理时间修改客户端超时时间。

4、脚本错误(php语法错误、lua语法错误)。

解决方法:查看nginx_err_log php_err_log。

5、访问量过大,系统资源限制,不能打开过多文件。 磁盘空间不足。(access log开启可能导致磁盘满溢,服务器主动关闭)。

解决方法:修改/etc/sysctl.conf文件,并使用下面的命令确认: #sysctl -p。要使 limits.conf 文件配置生效,必须要确保 pam_limits.so 文件被加入到启动文件中。

6、后端服务无法处理,业务中断。

解决方法:从后端日志获取错误原因,解决后端服务器问题。

7、后端服务器在超时时间内,未响应Nginx代理请求。

解决方法:根据后端服务器实际处理情况,调正后端请求超时时间。

8、网站页面缓存过大。

解决方法:配置nginx.conf相关设置:fastcgi_buffers 8 128k;send_timeout 60。