Я ищу настройку, в которой я хотел бы иметь клиентские сертификаты SSL для всех, кроме одного исходного IP-адреса.
Моя идея состоит в том, чтобы установить
 ssl_verify_client необязательно;
и добавить сложный оператор if к местоположениям.
Однако я не знаю, как написать такой оператор if.
  # для этого требуются клиентские сертификаты ssl для всех местоположений
  место расположения / {
    если ($ ssl_client_verify! = "УСПЕХ") { 
       вернуть 403; 
    ...
  }
  # теперь, что написать, чтобы требовать ssl-сертификаты, за исключением случаев, когда исходный IP-адрес, например, 1.2.3.4
  местоположение / два {
    если (?????) { 
       вернуть 403; 
    ...
  }
Изменить: дополнительная информация
Переключатель ssl_verify_client со значением по желанию сообщает клиентам, что они могут, но не обязаны отправлять клиентские сертификаты.
Итак, проверив переменную $var_ssl_client_verify Я могу видеть, был ли сертификат клиента представлен и действителен (УСПЕХ) или не.
Это правило должно применяться ко всем клиентам, у которых нет данного исходного IP. Для одного конкретного исходного IP я не хочу проверять клиентские сертификаты.
Мне нужно что-то вроде
    если ($ ssl_client_verify! = "УСПЕХ" и source_ip! = 1.2.3.4) { 
       вернуть 403; 
    }
Редактировать 2: Я изменил название с
настроить nginx так, чтобы клиентские сертификаты требовались для всех, кроме заданного IP-адреса источника
к
настроить nginx, чтобы он требовал определенных условий местоположения для всех, кроме данного исходного IP-адреса поскольку то, с чем я действительно борюсь, не имеет ничего общего с клиентскими сертификатами, а с объединением операторов if и условной фильтрацией исходного IP-адреса.